torch-glare 2.3.0 → 2.4.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 (264) hide show
  1. package/README.md +8 -0
  2. package/apps/lib/components/ActionButton.tsx +7 -12
  3. package/apps/lib/components/ActionsGroup.tsx +4 -15
  4. package/apps/lib/components/AlertDialog.tsx +173 -191
  5. package/apps/lib/components/Avatar.tsx +13 -16
  6. package/apps/lib/components/Badge.tsx +7 -3
  7. package/apps/lib/components/BadgeField.tsx +76 -71
  8. package/apps/lib/components/Breadcrumb.tsx +49 -85
  9. package/apps/lib/components/Button.tsx +20 -19
  10. package/apps/lib/components/ButtonGroup.tsx +31 -41
  11. package/apps/lib/components/Calendar.tsx +51 -29
  12. package/apps/lib/components/Card.tsx +2 -13
  13. package/apps/lib/components/ChartBlockTool.ts +17 -52
  14. package/apps/lib/components/Checkbox.tsx +9 -16
  15. package/apps/lib/components/ContextMenu.tsx +110 -106
  16. package/apps/lib/components/CountBadge.tsx +4 -6
  17. package/apps/lib/components/DataTable.tsx +196 -216
  18. package/apps/lib/components/DataViews/DataViewRadio.tsx +10 -8
  19. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +21 -55
  20. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  21. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  22. package/apps/lib/components/DataViews/FilterPanel.tsx +173 -150
  23. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  24. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  25. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  26. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  27. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  28. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  29. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  30. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  31. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  32. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  33. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +87 -0
  34. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  35. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  36. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  37. package/apps/lib/components/DataViews/index.ts +26 -26
  38. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  39. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  40. package/apps/lib/components/DataViews/types.ts +111 -114
  41. package/apps/lib/components/DatePicker.tsx +198 -191
  42. package/apps/lib/components/Dialog.tsx +92 -105
  43. package/apps/lib/components/Divider.tsx +21 -24
  44. package/apps/lib/components/Drawer.tsx +79 -139
  45. package/apps/lib/components/DropdownMenu.tsx +144 -181
  46. package/apps/lib/components/FieldHint.tsx +4 -11
  47. package/apps/lib/components/Form.tsx +146 -155
  48. package/apps/lib/components/FormStepper.tsx +9 -39
  49. package/apps/lib/components/HeaderBar.tsx +119 -0
  50. package/apps/lib/components/ImageAttachment.tsx +111 -73
  51. package/apps/lib/components/InnerLabelField.tsx +20 -16
  52. package/apps/lib/components/Input.tsx +171 -172
  53. package/apps/lib/components/InputField.tsx +44 -45
  54. package/apps/lib/components/InputOTP.tsx +68 -69
  55. package/apps/lib/components/Label.tsx +31 -35
  56. package/apps/lib/components/LabelField.tsx +4 -5
  57. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  58. package/apps/lib/components/LabeledRadio.tsx +7 -5
  59. package/apps/lib/components/LinkButton.tsx +2 -9
  60. package/apps/lib/components/LoginButton.tsx +4 -9
  61. package/apps/lib/components/PasswordLevel.tsx +5 -5
  62. package/apps/lib/components/Popover.tsx +15 -33
  63. package/apps/lib/components/ProfileMenu.tsx +67 -72
  64. package/apps/lib/components/Radio.tsx +1 -5
  65. package/apps/lib/components/RadioCard.tsx +9 -28
  66. package/apps/lib/components/ScrollArea.tsx +45 -43
  67. package/apps/lib/components/SearchField.tsx +49 -39
  68. package/apps/lib/components/SearchableSelect.tsx +46 -52
  69. package/apps/lib/components/SearchableTable.tsx +199 -219
  70. package/apps/lib/components/SearchableTree.tsx +469 -0
  71. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  72. package/apps/lib/components/SectionBlock.tsx +4 -16
  73. package/apps/lib/components/Select.tsx +53 -80
  74. package/apps/lib/components/SimpleSelect.tsx +196 -187
  75. package/apps/lib/components/Skeleton.tsx +9 -12
  76. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  77. package/apps/lib/components/SpinLoading.tsx +33 -49
  78. package/apps/lib/components/Stepper.tsx +13 -56
  79. package/apps/lib/components/Switch.tsx +8 -10
  80. package/apps/lib/components/TabFormItem.tsx +3 -12
  81. package/apps/lib/components/TabSwitch.tsx +7 -34
  82. package/apps/lib/components/Table.tsx +60 -75
  83. package/apps/lib/components/TableDnDWrapper.ts +15 -48
  84. package/apps/lib/components/TextEditor.tsx +93 -104
  85. package/apps/lib/components/Textarea.tsx +8 -12
  86. package/apps/lib/components/Timeline.tsx +21 -41
  87. package/apps/lib/components/Toast.tsx +83 -83
  88. package/apps/lib/components/Toggle.tsx +112 -114
  89. package/apps/lib/components/ToggleButton.tsx +1 -1
  90. package/apps/lib/components/Tooltip.tsx +24 -19
  91. package/apps/lib/components/TransparentLabel.tsx +61 -62
  92. package/apps/lib/components/TreeDropDown.tsx +86 -52
  93. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  94. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  95. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  96. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  97. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  98. package/apps/lib/components/TreeFolder/index.ts +15 -8
  99. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  100. package/apps/lib/components/TreeFolder/types.ts +32 -32
  101. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  102. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  103. package/apps/lib/hooks/useClickOutside.ts +21 -20
  104. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  105. package/apps/lib/hooks/useIsMobile.ts +12 -12
  106. package/apps/lib/hooks/useResize.ts +54 -65
  107. package/apps/lib/hooks/useTagSelection.ts +201 -201
  108. package/apps/lib/layouts/CNLayout.tsx +181 -140
  109. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  110. package/apps/lib/layouts/FieldSection.tsx +2 -6
  111. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  112. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  113. package/apps/lib/registry.json +1004 -0
  114. package/apps/lib/tsconfig.json +9 -0
  115. package/apps/lib/utils/cn.ts +1 -1
  116. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  117. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  118. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  119. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  120. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  121. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  122. package/apps/lib/utils/dateFormat.ts +64 -54
  123. package/apps/lib/utils/markdownParser.ts +2 -7
  124. package/apps/lib/utils/resize.ts +21 -25
  125. package/apps/lib/utils/types.ts +13 -13
  126. package/dist/bin/index.js +8 -2
  127. package/dist/bin/index.js.map +1 -1
  128. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  129. package/dist/src/shared/getAvailableFiles.js +6 -1
  130. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  131. package/dist/src/shared/loadRegistry.d.ts +7 -0
  132. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  133. package/dist/src/shared/loadRegistry.js +31 -0
  134. package/dist/src/shared/loadRegistry.js.map +1 -0
  135. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  136. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  137. package/dist/src/shared/resolveInstallPlan.js +39 -0
  138. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  139. package/dist/src/types/main.d.ts +24 -0
  140. package/dist/src/types/main.d.ts.map +1 -1
  141. package/docs/README.md +10 -2
  142. package/docs/components/action-button.md +30 -24
  143. package/docs/components/actions-group.md +26 -20
  144. package/docs/components/alert-dialog.md +45 -45
  145. package/docs/components/avatar.md +6 -2
  146. package/docs/components/badge-field.md +6 -2
  147. package/docs/components/badge.md +7 -1
  148. package/docs/components/breadcrumb.md +15 -40
  149. package/docs/components/button-group.md +13 -10
  150. package/docs/components/button.md +58 -33
  151. package/docs/components/calendar.md +26 -19
  152. package/docs/components/card.md +19 -16
  153. package/docs/components/chart-block-tool.md +128 -0
  154. package/docs/components/checkbox.md +16 -8
  155. package/docs/components/cn-layout.md +7 -1
  156. package/docs/components/context-menu.md +47 -24
  157. package/docs/components/count-badge.md +7 -1
  158. package/docs/components/data-table.md +45 -33
  159. package/docs/components/data-views-config-panel.md +18 -14
  160. package/docs/components/data-views-layout.md +20 -17
  161. package/docs/components/date-picker.md +30 -23
  162. package/docs/components/dialog.md +43 -42
  163. package/docs/components/divider.md +10 -4
  164. package/docs/components/drawer.md +8 -33
  165. package/docs/components/dropdown-menu.md +51 -32
  166. package/docs/components/field-hint.md +37 -25
  167. package/docs/components/field-section.md +9 -3
  168. package/docs/components/form-stepper.md +6 -0
  169. package/docs/components/form.md +17 -20
  170. package/docs/components/header-bar.md +187 -0
  171. package/docs/components/image-attachment.md +33 -41
  172. package/docs/components/inbox-view.md +16 -5
  173. package/docs/components/inner-label-field.md +34 -24
  174. package/docs/components/input-field.md +18 -10
  175. package/docs/components/input-otp.md +14 -11
  176. package/docs/components/input.md +22 -16
  177. package/docs/components/kanban-view.md +15 -5
  178. package/docs/components/label-field.md +32 -22
  179. package/docs/components/label.md +43 -32
  180. package/docs/components/labeled-check-box.md +16 -8
  181. package/docs/components/labeled-radio.md +18 -11
  182. package/docs/components/link-button.md +7 -1
  183. package/docs/components/login-button.md +8 -2
  184. package/docs/components/password-level.md +37 -24
  185. package/docs/components/popover.md +26 -23
  186. package/docs/components/profile-menu.md +38 -27
  187. package/docs/components/radio-card.md +16 -9
  188. package/docs/components/radio.md +16 -8
  189. package/docs/components/scroll-area.md +6 -2
  190. package/docs/components/search-field.md +14 -6
  191. package/docs/components/searchable-select.md +19 -14
  192. package/docs/components/searchable-table.md +60 -41
  193. package/docs/components/searchable-tree-dialog.md +190 -0
  194. package/docs/components/searchable-tree.md +200 -0
  195. package/docs/components/section-block.md +130 -4
  196. package/docs/components/select.md +23 -18
  197. package/docs/components/simple-select.md +14 -10
  198. package/docs/components/skeleton.md +43 -33
  199. package/docs/components/slide-date-picker.md +37 -29
  200. package/docs/components/spin-loading.md +32 -23
  201. package/docs/components/stepper.md +6 -0
  202. package/docs/components/switch.md +14 -6
  203. package/docs/components/tab-form-item.md +7 -1
  204. package/docs/components/tab-switch.md +13 -6
  205. package/docs/components/table-dnd-wrapper.md +105 -0
  206. package/docs/components/table-view.md +15 -5
  207. package/docs/components/table.md +28 -28
  208. package/docs/components/text-editor.md +19 -13
  209. package/docs/components/textarea.md +15 -7
  210. package/docs/components/timeline.md +6 -0
  211. package/docs/components/toast.md +35 -26
  212. package/docs/components/toggle-button.md +24 -21
  213. package/docs/components/toggle.md +23 -15
  214. package/docs/components/tooltip.md +42 -30
  215. package/docs/components/transparent-label.md +29 -20
  216. package/docs/components/tree-drop-down.md +31 -23
  217. package/docs/components/tree-sub-layout.md +6 -2
  218. package/docs/components/tree-view.md +16 -5
  219. package/docs/explanation/architecture.md +54 -0
  220. package/docs/explanation/design-system.md +52 -0
  221. package/docs/how-to/data-views-from-backend-response.md +7 -4
  222. package/docs/how-to/guides.md +24 -18
  223. package/docs/migration/changelog.md +38 -0
  224. package/docs/reference/cli.md +87 -0
  225. package/docs/reference/components.md +11 -12
  226. package/docs/reference/hooks.md +8 -8
  227. package/docs/reference/providers.md +22 -22
  228. package/docs/reference/tailwind-plugins.md +2 -2
  229. package/docs/reference/theme.md +85 -0
  230. package/docs/reference/types.md +4 -4
  231. package/docs/reference/utilities.md +19 -26
  232. package/docs/tutorials/building-first-form.md +20 -13
  233. package/docs/tutorials/component-composition.md +34 -50
  234. package/docs/tutorials/getting-started.md +2 -2
  235. package/docs/tutorials/theming-basics.md +13 -10
  236. package/package.json +31 -3
  237. package/dist/src/commands/block.d.ts +0 -5
  238. package/dist/src/commands/block.d.ts.map +0 -1
  239. package/dist/src/commands/block.js +0 -255
  240. package/dist/src/commands/block.js.map +0 -1
  241. package/dist/src/shared/configureFonts.d.ts +0 -6
  242. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  243. package/dist/src/shared/configureFonts.js +0 -106
  244. package/dist/src/shared/configureFonts.js.map +0 -1
  245. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  246. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  247. package/dist/src/shared/configureGlobalCss.js +0 -154
  248. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  249. package/dist/src/shared/configureTailwind.d.ts +0 -7
  250. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  251. package/dist/src/shared/configureTailwind.js +0 -163
  252. package/dist/src/shared/configureTailwind.js.map +0 -1
  253. package/dist/src/shared/detectFramework.d.ts +0 -23
  254. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  255. package/dist/src/shared/detectFramework.js +0 -119
  256. package/dist/src/shared/detectFramework.js.map +0 -1
  257. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  258. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  259. package/dist/src/shared/installBaseUtils.js +0 -79
  260. package/dist/src/shared/installBaseUtils.js.map +0 -1
  261. package/dist/src/shared/resolveAliases.d.ts +0 -24
  262. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  263. package/dist/src/shared/resolveAliases.js +0 -98
  264. package/dist/src/shared/resolveAliases.js.map +0 -1
package/README.md CHANGED
@@ -7,6 +7,14 @@ Welcome to the **TORCH Glare Components Library**! This library offers a compreh
7
7
  ## Documentation
8
8
  You can find the complete documentation at: [https://glare.torchcorp.com](https://glare.torchcorp.com)
9
9
 
10
+ ## MCP Server (AI assistants)
11
+ TORCH Glare ships an [MCP](https://modelcontextprotocol.io) server (`torch-glare-mcp`) that gives
12
+ AI assistants full access to component docs, API references, code examples, install commands, and
13
+ the actual source the CLI copies. See [`mcp/README.md`](mcp/README.md).
14
+
15
+ Wire it into your AI client with `npx torch-glare mcp`, or, when working in this repo, run
16
+ `pnpm run mcp:build` once — the local server is registered in [`.mcp.json`](.mcp.json).
17
+
10
18
  ## Contributing
11
19
  We’re excited to welcome contributors! To get started:
12
20
 
@@ -17,20 +17,19 @@ const buttonVariants = cva("!rounded-[4px]", {
17
17
  },
18
18
  });
19
19
 
20
-
21
20
  interface Props
22
- extends ButtonHTMLAttributes<HTMLButtonElement>,
23
- VariantProps<typeof buttonVariants> {
21
+ extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
24
22
  is_loading?: boolean;
25
23
  disabled?: boolean;
26
24
  asChild?: boolean;
27
25
  as?: React.ElementType;
28
- theme?: Themes
29
- variant?: ButtonVariant
26
+ theme?: Themes;
27
+ variant?: ButtonVariant;
30
28
  }
31
29
  export const ActionButton = function ({
32
30
  size,
33
31
  asChild,
32
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- excluded from {...props} spread
34
33
  as: Tag = "button",
35
34
  className,
36
35
  variant,
@@ -45,17 +44,13 @@ export const ActionButton = function ({
45
44
  asChild={asChild}
46
45
  buttonType="icon"
47
46
  type={type}
48
- size={
49
- size == "XS" ? "S" :
50
- size == "S" ? "M" :
51
- size == "M" ? "L" : "S"
52
- }
47
+ size={size == "XS" ? "S" : size == "S" ? "M" : size == "M" ? "L" : "S"}
53
48
  variant={variant}
54
49
  className={cn(
55
50
  buttonVariants({
56
51
  size,
57
- })
58
- , className
52
+ }),
53
+ className,
59
54
  )}
60
55
  {...props}
61
56
  >
@@ -5,34 +5,23 @@ import { Divider } from "./Divider";
5
5
 
6
6
  interface Props extends HTMLAttributes<HTMLDivElement> {
7
7
  withDivider?: boolean; // to display the divider line if you pass it see on figma design file
8
- theme?: Themes
8
+ theme?: Themes;
9
9
  }
10
10
 
11
- const ActionsGroup: React.FC<Props> = ({
12
- withDivider,
13
- className,
14
- children,
15
- theme,
16
- ...props
17
- }) => {
11
+ const ActionsGroup: React.FC<Props> = ({ withDivider, className, children, theme, ...props }) => {
18
12
  return (
19
13
  <section
20
14
  {...props}
21
15
  data-theme={theme}
22
16
  className={cn("flex items-center gap-2 w-full", className)}
23
17
  >
24
- {withDivider && (
25
- <Divider />
26
- )}
18
+ {withDivider && <Divider />}
27
19
  {children}
28
- {withDivider && (
29
- <Divider />
30
- )}
20
+ {withDivider && <Divider />}
31
21
  </section>
32
22
  );
33
23
  };
34
24
 
35
25
  // <div className="flex border-t border-solid border-border-presentation-global-primary flex-1 px-2" />
36
26
 
37
-
38
27
  export default ActionsGroup;
@@ -1,222 +1,204 @@
1
- "use client"
1
+ "use client";
2
2
 
3
- import * as React from "react"
4
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"
3
+ import * as React from "react";
4
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
5
5
 
6
- import { cn } from "../utils/cn"
7
- import { Button, buttonVariants } from "./Button"
8
- import { ButtonVariant } from "../utils/types"
9
- import { cva } from "class-variance-authority"
6
+ import { cn } from "../utils/cn";
7
+ import { Button, buttonVariants } from "./Button";
8
+ import { ButtonVariant } from "../utils/types";
9
+ import { cva } from "class-variance-authority";
10
10
 
11
11
  const StatusTextStyle = cva("", {
12
- variants: {
13
- variant: {
14
- default: "[&_strong]:text-content-presentation-global-primary [&_[data-description]]:text-content-presentation-global-primary",
15
- info: "[&_strong]:text-content-presentation-state-information [&_[data-description]]:text-content-presentation-state-information",
16
- success: "[&_strong]:text-content-presentation-state-success [&_[data-description]]:text-content-presentation-state-success",
17
- warning: "[&_strong]:text-content-presentation-state-warning [&_[data-description]]:text-content-presentation-state-warning",
18
- error: "[&_strong]:text-content-presentation-state-negative [&_[data-description]]:text-content-presentation-state-negative",
19
- }
20
- },
21
- defaultVariants: {
22
- variant: "default",
12
+ variants: {
13
+ variant: {
14
+ default:
15
+ "[&_strong]:text-content-presentation-global-primary [&_[data-description]]:text-content-presentation-global-primary",
16
+ info: "[&_strong]:text-content-presentation-state-information [&_[data-description]]:text-content-presentation-state-information",
17
+ success:
18
+ "[&_strong]:text-content-presentation-state-success [&_[data-description]]:text-content-presentation-state-success",
19
+ warning:
20
+ "[&_strong]:text-content-presentation-state-warning [&_[data-description]]:text-content-presentation-state-warning",
21
+ error:
22
+ "[&_strong]:text-content-presentation-state-negative [&_[data-description]]:text-content-presentation-state-negative",
23
23
  },
24
+ },
25
+ defaultVariants: {
26
+ variant: "default",
27
+ },
24
28
  });
25
29
 
30
+ const AlertDialog = AlertDialogPrimitive.Root;
26
31
 
27
- const AlertDialog = AlertDialogPrimitive.Root
28
-
29
- const AlertDialogTrigger = AlertDialogPrimitive.Trigger
32
+ const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
30
33
 
31
- const AlertDialogPortal = AlertDialogPrimitive.Portal
34
+ const AlertDialogPortal = AlertDialogPrimitive.Portal;
32
35
 
33
36
  const AlertDialogOverlay = React.forwardRef<
34
- React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
35
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
37
+ React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
38
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
36
39
  >(({ className, ...props }, ref) => (
37
- <AlertDialogPrimitive.Overlay
38
- className={cn(
39
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
40
- className
41
- )}
42
- {...props}
43
- ref={ref}
44
- />
45
- ))
46
- AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
40
+ <AlertDialogPrimitive.Overlay
41
+ className={cn(
42
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
43
+ className,
44
+ )}
45
+ {...props}
46
+ ref={ref}
47
+ />
48
+ ));
49
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
47
50
 
48
51
  const AlertDialogContent = React.forwardRef<
49
- React.ElementRef<typeof AlertDialogPrimitive.Content>,
50
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content> & {
51
- variant?: "info" | "success" | "warning" | "error" | "default"
52
- }
52
+ React.ElementRef<typeof AlertDialogPrimitive.Content>,
53
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content> & {
54
+ variant?: "info" | "success" | "warning" | "error" | "default";
55
+ }
53
56
  >(({ className, variant = "default", ...props }, ref) => (
54
- <AlertDialogPortal>
55
- <AlertDialogOverlay />
56
- <AlertDialogPrimitive.Content
57
- ref={ref}
58
- className={cn(
59
- StatusTextStyle({ variant }),
60
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-[800px] translate-x-[-50%] translate-y-[-50%]",
61
- "gap-2 rounded-[16px] border-2 border-border-presentation-global-primary",
62
- "bg-background-presentation-body-overlay-primary p-[12px]",
63
- "text-content-presentation-global-primary",
64
- "shadow-lg duration-200",
65
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
66
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
67
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
68
- "data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]",
69
- "data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
70
- className
71
- )}
72
- {...props}
73
- />
74
- </AlertDialogPortal>
75
- ))
76
- AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
77
-
78
- const AlertDialogHeader = ({
79
- className,
80
- ...props
81
- }: React.HTMLAttributes<HTMLDivElement>) => (
82
- <div
83
- className={cn(
84
- "flex justify-between space-x-2 text-left",
85
- className
86
- )}
87
- {...props}
88
- />
89
- )
90
- AlertDialogHeader.displayName = "AlertDialogHeader"
91
-
92
- const AlertDialogFooter = ({
93
- className,
94
- ...props
95
- }: React.HTMLAttributes<HTMLDivElement>) => (
96
- <div
97
- className={cn(
98
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
99
- className
100
- )}
101
- {...props}
57
+ <AlertDialogPortal>
58
+ <AlertDialogOverlay />
59
+ <AlertDialogPrimitive.Content
60
+ ref={ref}
61
+ className={cn(
62
+ StatusTextStyle({ variant }),
63
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-[800px] translate-x-[-50%] translate-y-[-50%]",
64
+ "gap-2 rounded-[16px] border-2 border-border-presentation-global-primary",
65
+ "bg-background-presentation-body-overlay-primary p-[12px]",
66
+ "text-content-presentation-global-primary",
67
+ "shadow-lg duration-200",
68
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
69
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
70
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
71
+ "data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]",
72
+ "data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
73
+ className,
74
+ )}
75
+ {...props}
102
76
  />
103
- )
104
- AlertDialogFooter.displayName = "AlertDialogFooter"
77
+ </AlertDialogPortal>
78
+ ));
79
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
80
+
81
+ const AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
82
+ <div className={cn("flex justify-between space-x-2 text-left", className)} {...props} />
83
+ );
84
+ AlertDialogHeader.displayName = "AlertDialogHeader";
85
+
86
+ const AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
87
+ <div
88
+ className={cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)}
89
+ {...props}
90
+ />
91
+ );
92
+ AlertDialogFooter.displayName = "AlertDialogFooter";
105
93
 
106
94
  const AlertDialogTitle = React.forwardRef<
107
- React.ElementRef<typeof AlertDialogPrimitive.Title>,
108
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
95
+ React.ElementRef<typeof AlertDialogPrimitive.Title>,
96
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
109
97
  >(({ className, ...props }, ref) => (
110
- <AlertDialogPrimitive.Title
111
- ref={ref}
112
- className={cn("typography-display-medium-semibold", className)}
113
- {...props}
114
- />
115
- ))
116
- AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
98
+ <AlertDialogPrimitive.Title
99
+ ref={ref}
100
+ className={cn("typography-display-medium-semibold", className)}
101
+ {...props}
102
+ />
103
+ ));
104
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
117
105
 
118
106
  const AlertDialogLabel = React.forwardRef<
119
- React.ElementRef<typeof AlertDialogPrimitive.Title>,
120
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title> & {
121
- title: string
122
- }
107
+ React.ElementRef<typeof AlertDialogPrimitive.Title>,
108
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title> & {
109
+ title: string;
110
+ }
123
111
  >(({ className, title, ...props }, ref) => {
124
- const words = title.split(' ');
125
- const firstWord = words[0];
126
- const restOfTitle = words.slice(1).join(' ');
127
-
128
- return (
129
- <AlertDialogPrimitive.Title
130
- ref={ref}
131
- className={cn("typography-display-medium-semibold", className)}
132
- {...props}
133
- >
134
- <p className="first-letter:uppercase typography-display-medium-semibold" >
135
- <strong className="typography-display-medium-semibold" >{firstWord}</strong>
136
- {restOfTitle.length > 0 && ' ' + restOfTitle}
137
- </p>
138
- </AlertDialogPrimitive.Title>
139
- )
140
- })
141
- AlertDialogLabel.displayName = "AlertDialogLabel"
112
+ const words = title.split(" ");
113
+ const firstWord = words[0];
114
+ const restOfTitle = words.slice(1).join(" ");
115
+
116
+ return (
117
+ <AlertDialogPrimitive.Title
118
+ ref={ref}
119
+ className={cn("typography-display-medium-semibold", className)}
120
+ {...props}
121
+ >
122
+ <p className="first-letter:uppercase typography-display-medium-semibold">
123
+ <strong className="typography-display-medium-semibold">{firstWord}</strong>
124
+ {restOfTitle.length > 0 && " " + restOfTitle}
125
+ </p>
126
+ </AlertDialogPrimitive.Title>
127
+ );
128
+ });
129
+ AlertDialogLabel.displayName = "AlertDialogLabel";
142
130
 
143
131
  const AlertDialogDescription = React.forwardRef<
144
- React.ElementRef<typeof AlertDialogPrimitive.Description>,
145
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
132
+ React.ElementRef<typeof AlertDialogPrimitive.Description>,
133
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
146
134
  >(({ className, ...props }, ref) => (
147
- <AlertDialogPrimitive.Description
148
- data-description=""
149
- ref={ref}
150
- className={cn(
151
- "typography-body-large-medium",
152
- "bg-background-presentation-form-base",
153
- "border border-border-presentation-global-primary",
154
- "rounded-[8px] p-[24px_48px_48px_48px]",
155
- className
156
- )}
157
- {...props}
158
- />
159
- ))
160
- AlertDialogDescription.displayName =
161
- AlertDialogPrimitive.Description.displayName
135
+ <AlertDialogPrimitive.Description
136
+ data-description=""
137
+ ref={ref}
138
+ className={cn(
139
+ "typography-body-large-medium",
140
+ "bg-background-presentation-form-base",
141
+ "border border-border-presentation-global-primary",
142
+ "rounded-[8px] p-[24px_48px_48px_48px]",
143
+ className,
144
+ )}
145
+ {...props}
146
+ />
147
+ ));
148
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
162
149
 
163
150
  const AlertDialogAction = React.forwardRef<
164
- React.ElementRef<typeof AlertDialogPrimitive.Action>,
165
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action> & {
166
- size?: "M" | "S" | "L" | "XL"
167
- variant?: ButtonVariant
168
- buttonType?: "button" | "icon"
169
- }
170
- >(({ className,
171
- size = "M",
172
- variant = "BorderStyle",
173
- buttonType = "button",
174
- ...props }, ref) => (
175
- <AlertDialogPrimitive.Action
176
- ref={ref}
177
- className={cn(buttonVariants({ variant: variant, size: size, buttonType: buttonType }), className)}
178
- asChild
179
- >
180
- <Button size={size} variant={variant} buttonType={buttonType} {...props} />
181
- </AlertDialogPrimitive.Action>
182
- ))
183
- AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
151
+ React.ElementRef<typeof AlertDialogPrimitive.Action>,
152
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action> & {
153
+ size?: "M" | "S" | "L" | "XL";
154
+ variant?: ButtonVariant;
155
+ buttonType?: "button" | "icon";
156
+ }
157
+ >(({ className, size = "M", variant = "BorderStyle", buttonType = "button", ...props }, ref) => (
158
+ <AlertDialogPrimitive.Action
159
+ ref={ref}
160
+ className={cn(
161
+ buttonVariants({ variant: variant, size: size, buttonType: buttonType }),
162
+ className,
163
+ )}
164
+ asChild
165
+ >
166
+ <Button size={size} variant={variant} buttonType={buttonType} {...props} />
167
+ </AlertDialogPrimitive.Action>
168
+ ));
169
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
184
170
 
185
171
  const AlertDialogCancel = React.forwardRef<
186
- React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
187
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel> & {
188
- size?: "M" | "S" | "L" | "XL"
189
- variant?: ButtonVariant
190
- buttonType?: "button" | "icon"
191
- }
192
- >(({ className,
193
- size = "M",
194
- variant = "RedSecStyle",
195
- buttonType = "icon",
196
- ...props }, ref) => (
197
- <AlertDialogPrimitive.Cancel
198
- ref={ref}
199
- className={cn(
200
- buttonVariants({ variant: variant, size: size, buttonType: buttonType }),
201
- "",
202
- className
203
- )}
204
- {...props}
205
- />
206
- ))
207
- AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
172
+ React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
173
+ React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel> & {
174
+ size?: "M" | "S" | "L" | "XL";
175
+ variant?: ButtonVariant;
176
+ buttonType?: "button" | "icon";
177
+ }
178
+ >(({ className, size = "M", variant = "RedSecStyle", buttonType = "icon", ...props }, ref) => (
179
+ <AlertDialogPrimitive.Cancel
180
+ ref={ref}
181
+ className={cn(
182
+ buttonVariants({ variant: variant, size: size, buttonType: buttonType }),
183
+ "",
184
+ className,
185
+ )}
186
+ {...props}
187
+ />
188
+ ));
189
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
208
190
 
209
191
  export {
210
- AlertDialog,
211
- AlertDialogPortal,
212
- AlertDialogOverlay,
213
- AlertDialogTrigger,
214
- AlertDialogContent,
215
- AlertDialogHeader,
216
- AlertDialogFooter,
217
- AlertDialogTitle,
218
- AlertDialogLabel,
219
- AlertDialogDescription,
220
- AlertDialogAction,
221
- AlertDialogCancel,
222
- }
192
+ AlertDialog,
193
+ AlertDialogPortal,
194
+ AlertDialogOverlay,
195
+ AlertDialogTrigger,
196
+ AlertDialogContent,
197
+ AlertDialogHeader,
198
+ AlertDialogFooter,
199
+ AlertDialogTitle,
200
+ AlertDialogLabel,
201
+ AlertDialogDescription,
202
+ AlertDialogAction,
203
+ AlertDialogCancel,
204
+ };
@@ -1,8 +1,8 @@
1
- "use client"
1
+ "use client";
2
2
 
3
- import * as React from "react"
4
- import * as AvatarPrimitive from "@radix-ui/react-avatar"
5
- import { cn } from "../utils/cn"
3
+ import * as React from "react";
4
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
5
+ import { cn } from "../utils/cn";
6
6
 
7
7
  const Avatar = React.forwardRef<
8
8
  React.ElementRef<typeof AvatarPrimitive.Root>,
@@ -10,14 +10,11 @@ const Avatar = React.forwardRef<
10
10
  >(({ className, ...props }, ref) => (
11
11
  <AvatarPrimitive.Root
12
12
  ref={ref}
13
- className={cn(
14
- "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
15
- className
16
- )}
13
+ className={cn("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full", className)}
17
14
  {...props}
18
15
  />
19
- ))
20
- Avatar.displayName = AvatarPrimitive.Root.displayName
16
+ ));
17
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
21
18
 
22
19
  const AvatarImage = React.forwardRef<
23
20
  React.ElementRef<typeof AvatarPrimitive.Image>,
@@ -28,8 +25,8 @@ const AvatarImage = React.forwardRef<
28
25
  className={cn("aspect-square h-full w-full object-cover", className)}
29
26
  {...props}
30
27
  />
31
- ))
32
- AvatarImage.displayName = AvatarPrimitive.Image.displayName
28
+ ));
29
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
33
30
 
34
31
  const AvatarFallback = React.forwardRef<
35
32
  React.ElementRef<typeof AvatarPrimitive.Fallback>,
@@ -39,11 +36,11 @@ const AvatarFallback = React.forwardRef<
39
36
  ref={ref}
40
37
  className={cn(
41
38
  "flex h-full w-full items-center justify-center rounded-full bg-background-presentation-action-disabled text-content-presentation-global-primary",
42
- className
39
+ className,
43
40
  )}
44
41
  {...props}
45
42
  />
46
- ))
47
- AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
43
+ ));
44
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
48
45
 
49
- export { Avatar, AvatarImage, AvatarFallback }
46
+ export { Avatar, AvatarImage, AvatarFallback };
@@ -122,6 +122,12 @@ export const badgeStyles = cva(
122
122
  "transition-all duration-200 ease-in-out",
123
123
  "whitespace-nowrap",
124
124
  "[&_i]:!leading-none",
125
+ // The subtle variants blend their label/icon with `mix-blend-luminosity`.
126
+ // `isolate` opens a new stacking context so that blend only composites
127
+ // against the badge's own background — not against arbitrary page layers
128
+ // behind it (semi-transparent rows, gradients, masks), which otherwise
129
+ // ghosts/double-strokes the text in "random" places.
130
+ "isolate",
125
131
  ],
126
132
  {
127
133
  variants: {
@@ -157,9 +163,7 @@ export const badgeStyles = cva(
157
163
  );
158
164
 
159
165
  interface BadgeProps
160
- extends
161
- Omit<HTMLAttributes<HTMLSpanElement>, "color">,
162
- VariantProps<typeof badgeStyles> {
166
+ extends Omit<HTMLAttributes<HTMLSpanElement>, "color">, VariantProps<typeof badgeStyles> {
163
167
  label?: string;
164
168
  badgeIcon?: ReactNode;
165
169
  showIcon?: boolean;