@fairmint/ui 0.4.9 → 0.4.11

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 (146) hide show
  1. package/dist/components/BrandedLoadingScreen/BrandedLoadingScreen.cjs +1 -1
  2. package/dist/components/BrandedLoadingScreen/BrandedLoadingScreen.js +1 -1
  3. package/dist/components/ErrorFallback/ErrorFallback.cjs +1 -1
  4. package/dist/components/ErrorFallback/ErrorFallback.js +1 -1
  5. package/dist/components/form/FormField.cjs +1 -1
  6. package/dist/components/form/FormField.js +1 -1
  7. package/dist/components/generic/AgentSuggestion/AgentSuggestion.cjs +1 -1
  8. package/dist/components/generic/AgentSuggestion/AgentSuggestion.js +1 -1
  9. package/dist/components/generic/Banner/Banner.cjs +1 -1
  10. package/dist/components/generic/Banner/Banner.js +1 -1
  11. package/dist/components/generic/BottomSheet/BottomSheet.cjs +1 -1
  12. package/dist/components/generic/BottomSheet/BottomSheet.js +1 -1
  13. package/dist/components/generic/CompanyBanner/CompanyBanner.cjs +1 -1
  14. package/dist/components/generic/CompanyBanner/CompanyBanner.js +1 -1
  15. package/dist/components/generic/ConfidentialityBanner/ConfidentialityBanner.cjs +1 -1
  16. package/dist/components/generic/ConfidentialityBanner/ConfidentialityBanner.js +1 -1
  17. package/dist/components/generic/Currency/Currency.cjs +1 -1
  18. package/dist/components/generic/Currency/Currency.js +1 -1
  19. package/dist/components/generic/DataRow/DataRow.cjs +24 -3
  20. package/dist/components/generic/DataRow/DataRow.cjs.map +1 -1
  21. package/dist/components/generic/DataRow/DataRow.d.ts.map +1 -1
  22. package/dist/components/generic/DataRow/DataRow.js +24 -3
  23. package/dist/components/generic/DataRow/DataRow.js.map +1 -1
  24. package/dist/components/generic/DataTable/DataTable.cjs +2 -2
  25. package/dist/components/generic/DataTable/DataTable.cjs.map +1 -1
  26. package/dist/components/generic/DataTable/DataTable.js +2 -2
  27. package/dist/components/generic/DataTable/DataTable.js.map +1 -1
  28. package/dist/components/generic/DateDisplay/DateDisplay.cjs +1 -1
  29. package/dist/components/generic/DateDisplay/DateDisplay.js +1 -1
  30. package/dist/components/generic/DocumentRow/DocumentRow.cjs +1 -1
  31. package/dist/components/generic/DocumentRow/DocumentRow.js +1 -1
  32. package/dist/components/generic/EditableSection/EditableSection.cjs +1 -1
  33. package/dist/components/generic/EditableSection/EditableSection.js +1 -1
  34. package/dist/components/generic/EmptyState/EmptyState.cjs +1 -1
  35. package/dist/components/generic/EmptyState/EmptyState.js +1 -1
  36. package/dist/components/generic/ErrorPage/ErrorPage.cjs +1 -1
  37. package/dist/components/generic/ErrorPage/ErrorPage.js +1 -1
  38. package/dist/components/generic/Eyebrow/Eyebrow.cjs +1 -1
  39. package/dist/components/generic/Eyebrow/Eyebrow.js +1 -1
  40. package/dist/components/generic/FileDropzone/FileDropzone.cjs +1 -1
  41. package/dist/components/generic/FileDropzone/FileDropzone.js +1 -1
  42. package/dist/components/generic/ListRow/ListRow.cjs +5 -4
  43. package/dist/components/generic/ListRow/ListRow.cjs.map +1 -1
  44. package/dist/components/generic/ListRow/ListRow.d.ts.map +1 -1
  45. package/dist/components/generic/ListRow/ListRow.js +5 -4
  46. package/dist/components/generic/ListRow/ListRow.js.map +1 -1
  47. package/dist/components/generic/MultiSelectSearch/MultiSelectSearch.cjs +1 -1
  48. package/dist/components/generic/MultiSelectSearch/MultiSelectSearch.js +1 -1
  49. package/dist/components/generic/NotificationRow/NotificationRow.cjs +1 -1
  50. package/dist/components/generic/NotificationRow/NotificationRow.js +1 -1
  51. package/dist/components/generic/Percent/Percent.cjs +1 -1
  52. package/dist/components/generic/Percent/Percent.js +1 -1
  53. package/dist/components/generic/PhotoCropModal/PhotoCropModal.cjs +1 -1
  54. package/dist/components/generic/PhotoCropModal/PhotoCropModal.js +1 -1
  55. package/dist/components/generic/ProcessingState/ProcessingState.cjs +1 -1
  56. package/dist/components/generic/ProcessingState/ProcessingState.js +1 -1
  57. package/dist/components/generic/RadioCard/RadioCard.cjs +1 -1
  58. package/dist/components/generic/RadioCard/RadioCard.js +1 -1
  59. package/dist/components/generic/StatCard/StatCard.cjs +1 -1
  60. package/dist/components/generic/StatCard/StatCard.js +1 -1
  61. package/dist/components/generic/StepCard/StepCard.cjs +3 -2
  62. package/dist/components/generic/StepCard/StepCard.cjs.map +1 -1
  63. package/dist/components/generic/StepCard/StepCard.d.ts.map +1 -1
  64. package/dist/components/generic/StepCard/StepCard.js +3 -2
  65. package/dist/components/generic/StepCard/StepCard.js.map +1 -1
  66. package/dist/components/generic/StepProgress/StepProgress.cjs +11 -7
  67. package/dist/components/generic/StepProgress/StepProgress.cjs.map +1 -1
  68. package/dist/components/generic/StepProgress/StepProgress.d.ts.map +1 -1
  69. package/dist/components/generic/StepProgress/StepProgress.js +11 -7
  70. package/dist/components/generic/StepProgress/StepProgress.js.map +1 -1
  71. package/dist/components/generic/TablePagination/TablePagination.cjs +1 -1
  72. package/dist/components/generic/TablePagination/TablePagination.js +1 -1
  73. package/dist/components/generic/TaskInboxPopover/TaskInboxPopover.cjs +1 -1
  74. package/dist/components/generic/TaskInboxPopover/TaskInboxPopover.js +1 -1
  75. package/dist/components/generic/TaskRow/TaskRow.cjs +1 -1
  76. package/dist/components/generic/TaskRow/TaskRow.js +1 -1
  77. package/dist/components/layout/AccountSheet/AccountSheet.cjs +1 -1
  78. package/dist/components/layout/AccountSheet/AccountSheet.js +1 -1
  79. package/dist/components/layout/MobileNav/MobileNav.cjs +1 -1
  80. package/dist/components/layout/MobileNav/MobileNav.js +1 -1
  81. package/dist/components/layout/PageHeader/PageHeader.cjs +1 -1
  82. package/dist/components/layout/PageHeader/PageHeader.js +1 -1
  83. package/dist/components/primitives/Glossary/GlossaryContext.cjs +39 -0
  84. package/dist/components/primitives/Glossary/GlossaryContext.cjs.map +1 -0
  85. package/dist/components/primitives/Glossary/GlossaryContext.d.ts +49 -0
  86. package/dist/components/primitives/Glossary/GlossaryContext.d.ts.map +1 -0
  87. package/dist/components/primitives/Glossary/GlossaryContext.js +39 -0
  88. package/dist/components/primitives/Glossary/GlossaryContext.js.map +1 -0
  89. package/dist/components/primitives/Glossary/GlossaryTerm.cjs +147 -0
  90. package/dist/components/primitives/Glossary/GlossaryTerm.cjs.map +1 -0
  91. package/dist/components/primitives/Glossary/GlossaryTerm.d.ts +10 -0
  92. package/dist/components/primitives/Glossary/GlossaryTerm.d.ts.map +1 -0
  93. package/dist/components/primitives/Glossary/GlossaryTerm.js +147 -0
  94. package/dist/components/primitives/Glossary/GlossaryTerm.js.map +1 -0
  95. package/dist/components/primitives/Glossary/index.d.ts +3 -0
  96. package/dist/components/primitives/Glossary/index.d.ts.map +1 -0
  97. package/dist/components/primitives/Text/Text.cjs +112 -0
  98. package/dist/components/primitives/Text/Text.cjs.map +1 -0
  99. package/dist/components/primitives/Text/Text.d.ts +22 -0
  100. package/dist/components/primitives/Text/Text.d.ts.map +1 -0
  101. package/dist/components/primitives/Text/Text.js +112 -0
  102. package/dist/components/primitives/Text/Text.js.map +1 -0
  103. package/dist/components/primitives/Text/index.d.ts +2 -0
  104. package/dist/components/primitives/Text/index.d.ts.map +1 -0
  105. package/dist/components/primitives/index.d.ts +2 -0
  106. package/dist/components/primitives/index.d.ts.map +1 -1
  107. package/dist/components/primitives/layout.cjs.map +1 -1
  108. package/dist/components/primitives/layout.d.ts +2 -1
  109. package/dist/components/primitives/layout.d.ts.map +1 -1
  110. package/dist/components/primitives/layout.js.map +1 -1
  111. package/dist/components/primitives/muiCompat.cjs +8 -8
  112. package/dist/components/primitives/muiCompat.cjs.map +1 -1
  113. package/dist/components/primitives/muiCompat.d.ts.map +1 -1
  114. package/dist/components/primitives/muiCompat.js +8 -8
  115. package/dist/components/primitives/muiCompat.js.map +1 -1
  116. package/dist/components/specific/DocumentRow/DocumentRow.cjs +1 -1
  117. package/dist/components/specific/DocumentRow/DocumentRow.js +1 -1
  118. package/dist/components/specific/InvestorProfileCard/InvestorProfileCard.cjs +1 -1
  119. package/dist/components/specific/InvestorProfileCard/InvestorProfileCard.js +1 -1
  120. package/dist/components/specific/WalletList/WalletList.cjs +1 -1
  121. package/dist/components/specific/WalletList/WalletList.js +1 -1
  122. package/dist/components/specific/WalletListItem/WalletListItem.cjs +3 -2
  123. package/dist/components/specific/WalletListItem/WalletListItem.cjs.map +1 -1
  124. package/dist/components/specific/WalletListItem/WalletListItem.d.ts.map +1 -1
  125. package/dist/components/specific/WalletListItem/WalletListItem.js +3 -2
  126. package/dist/components/specific/WalletListItem/WalletListItem.js.map +1 -1
  127. package/dist/constants/glossary.cjs +210 -0
  128. package/dist/constants/glossary.cjs.map +1 -0
  129. package/dist/constants/glossary.d.ts +26 -0
  130. package/dist/constants/glossary.d.ts.map +1 -0
  131. package/dist/constants/glossary.js +210 -0
  132. package/dist/constants/glossary.js.map +1 -0
  133. package/dist/fairmint-ui.cjs +13 -1
  134. package/dist/fairmint-ui.cjs.map +1 -1
  135. package/dist/fairmint-ui.js +13 -1
  136. package/dist/fairmint-ui.js.map +1 -1
  137. package/dist/index.d.ts +3 -0
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/styles.css +7 -12
  140. package/dist/utils/glossaryMatcher.cjs +89 -0
  141. package/dist/utils/glossaryMatcher.cjs.map +1 -0
  142. package/dist/utils/glossaryMatcher.d.ts +23 -0
  143. package/dist/utils/glossaryMatcher.d.ts.map +1 -0
  144. package/dist/utils/glossaryMatcher.js +89 -0
  145. package/dist/utils/glossaryMatcher.js.map +1 -0
  146. package/package.json +1 -1
@@ -6,7 +6,7 @@ const logo = require("../../theme/logo.cjs");
6
6
  const FairmintLogo = require("../FairmintLogo/FairmintLogo.cjs");
7
7
  const LoadingSpinner = require("../LoadingSpinner/LoadingSpinner.cjs");
8
8
  const layout = require("../primitives/layout.cjs");
9
- const Text = require("../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
9
+ const Text = require("../primitives/Text/Text.cjs");
10
10
  const defaultMessages = [];
11
11
  function BrandedLoadingScreen({
12
12
  messages = defaultMessages,
@@ -4,7 +4,7 @@ import { DEFAULT_FAIRMINT_LOGO_SRC } from "../../theme/logo.js";
4
4
  import { FairmintLogo } from "../FairmintLogo/FairmintLogo.js";
5
5
  import { LoadingSpinner } from "../LoadingSpinner/LoadingSpinner.js";
6
6
  import { Box, Stack } from "../primitives/layout.js";
7
- import { Text } from "../../node_modules/@mantine/core/esm/components/Text/Text.js";
7
+ import { Text } from "../primitives/Text/Text.js";
8
8
  const defaultMessages = [];
9
9
  function BrandedLoadingScreen({
10
10
  messages = defaultMessages,
@@ -5,7 +5,7 @@ const index = require("../../theme/index.cjs");
5
5
  const Button = require("../primitives/Button/Button.cjs");
6
6
  const layout = require("../primitives/layout.cjs");
7
7
  const Title = require("../../node_modules/@mantine/core/esm/components/Title/Title.cjs");
8
- const Text = require("../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
8
+ const Text = require("../primitives/Text/Text.cjs");
9
9
  function ErrorFallback({
10
10
  title = "Something went wrong",
11
11
  description = "We've been notified and are working on a fix.",
@@ -3,7 +3,7 @@ import { fairmintVars } from "../../theme/index.js";
3
3
  import { Button } from "../primitives/Button/Button.js";
4
4
  import { Container, Stack } from "../primitives/layout.js";
5
5
  import { Title } from "../../node_modules/@mantine/core/esm/components/Title/Title.js";
6
- import { Text } from "../../node_modules/@mantine/core/esm/components/Text/Text.js";
6
+ import { Text } from "../primitives/Text/Text.js";
7
7
  function ErrorFallback({
8
8
  title = "Something went wrong",
9
9
  description = "We've been notified and are working on a fix.",
@@ -4,7 +4,7 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const index = require("../../theme/index.cjs");
5
5
  const layout = require("../primitives/layout.cjs");
6
6
  const TextInput = require("../primitives/TextInput/TextInput.cjs");
7
- const Text = require("../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
7
+ const Text = require("../primitives/Text/Text.cjs");
8
8
  function FormField({
9
9
  name,
10
10
  label,
@@ -2,7 +2,7 @@ import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { fairmintVars } from "../../theme/index.js";
3
3
  import { Stack } from "../primitives/layout.js";
4
4
  import { TextInput } from "../primitives/TextInput/TextInput.js";
5
- import { Text } from "../../node_modules/@mantine/core/esm/components/Text/Text.js";
5
+ import { Text } from "../primitives/Text/Text.js";
6
6
  function FormField({
7
7
  name,
8
8
  label,
@@ -6,7 +6,7 @@ const ActionIcon = require("../../primitives/ActionIcon/ActionIcon.cjs");
6
6
  const layout = require("../../primitives/layout.cjs");
7
7
  const Tooltip = require("../../primitives/Tooltip/Tooltip.cjs");
8
8
  const spacing = require("../../../theme/spacing.cjs");
9
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
9
+ const Text = require("../../primitives/Text/Text.cjs");
10
10
  const MantineThemeProvider = require("../../../node_modules/@mantine/core/esm/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.cjs");
11
11
  const useComputedColorScheme = require("../../../node_modules/@mantine/core/esm/core/MantineProvider/use-mantine-color-scheme/use-computed-color-scheme.cjs");
12
12
  function useCaptableAiInfoAccent() {
@@ -4,7 +4,7 @@ import { ActionIcon } from "../../primitives/ActionIcon/ActionIcon.js";
4
4
  import { Box, Stack } from "../../primitives/layout.js";
5
5
  import { Tooltip } from "../../primitives/Tooltip/Tooltip.js";
6
6
  import { spacing } from "../../../theme/spacing.js";
7
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
7
+ import { Text } from "../../primitives/Text/Text.js";
8
8
  import { useMantineTheme } from "../../../node_modules/@mantine/core/esm/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.js";
9
9
  import { useComputedColorScheme } from "../../../node_modules/@mantine/core/esm/core/MantineProvider/use-mantine-color-scheme/use-computed-color-scheme.js";
10
10
  function useCaptableAiInfoAccent() {
@@ -9,7 +9,7 @@ const layout = require("../../primitives/layout.cjs");
9
9
  const spacing = require("../../../theme/spacing.cjs");
10
10
  const ThemeIcon = require("../../../node_modules/@mantine/core/esm/components/ThemeIcon/ThemeIcon.cjs");
11
11
  const Group = require("../../../node_modules/@mantine/core/esm/components/Group/Group.cjs");
12
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
12
+ const Text = require("../../primitives/Text/Text.cjs");
13
13
  const fontSizes = require("../../../theme/fontSizes.cjs");
14
14
  const TONE_COLORS = {
15
15
  brand: colors.colors.primary,
@@ -7,7 +7,7 @@ import { Box } from "../../primitives/layout.js";
7
7
  import { spacing } from "../../../theme/spacing.js";
8
8
  import { ThemeIcon } from "../../../node_modules/@mantine/core/esm/components/ThemeIcon/ThemeIcon.js";
9
9
  import { Group } from "../../../node_modules/@mantine/core/esm/components/Group/Group.js";
10
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
10
+ import { Text } from "../../primitives/Text/Text.js";
11
11
  import { fontSizes } from "../../../theme/fontSizes.js";
12
12
  const TONE_COLORS = {
13
13
  brand: colors.primary,
@@ -6,7 +6,7 @@ const index = require("../../../theme/index.cjs");
6
6
  const zIndex = require("../../../theme/zIndex.cjs");
7
7
  const Drawer = require("../../primitives/Drawer/Drawer.cjs");
8
8
  const layout = require("../../primitives/layout.cjs");
9
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
9
+ const Text = require("../../primitives/Text/Text.cjs");
10
10
  const UnstyledButton = require("../../../node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.cjs");
11
11
  const CLOSE_OUTSIDE_ENABLE_MS = 100;
12
12
  function BottomSheetScrollArea({ style, children, ...props }) {
@@ -4,7 +4,7 @@ import { fairmintVars, radii } from "../../../theme/index.js";
4
4
  import { overlayZIndexAboveLegacyShell } from "../../../theme/zIndex.js";
5
5
  import { Drawer } from "../../primitives/Drawer/Drawer.js";
6
6
  import { Box } from "../../primitives/layout.js";
7
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
7
+ import { Text } from "../../primitives/Text/Text.js";
8
8
  import { UnstyledButton } from "../../../node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.js";
9
9
  const CLOSE_OUTSIDE_ENABLE_MS = 100;
10
10
  function BottomSheetScrollArea({ style, children, ...props }) {
@@ -5,7 +5,7 @@ const index = require("../../../theme/index.cjs");
5
5
  const avatar = require("../../../utils/avatar.cjs");
6
6
  const Avatar = require("../../primitives/Avatar/Avatar.cjs");
7
7
  const layout = require("../../primitives/layout.cjs");
8
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
8
+ const Text = require("../../primitives/Text/Text.cjs");
9
9
  const BRAND_GRADIENT = `linear-gradient(90deg, ${index.brandColors.blue} 0%, ${index.brandColors.indigo} 50%, ${index.brandColors.purple} 100%)`;
10
10
  function CompanyBanner({
11
11
  companyName,
@@ -3,7 +3,7 @@ import { fairmintVars, brandColors } from "../../../theme/index.js";
3
3
  import { getInitials, getAvatarColor } from "../../../utils/avatar.js";
4
4
  import { Avatar } from "../../primitives/Avatar/Avatar.js";
5
5
  import { Box, Stack } from "../../primitives/layout.js";
6
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
6
+ import { Text } from "../../primitives/Text/Text.js";
7
7
  const BRAND_GRADIENT = `linear-gradient(90deg, ${brandColors.blue} 0%, ${brandColors.indigo} 50%, ${brandColors.purple} 100%)`;
8
8
  function CompanyBanner({
9
9
  companyName,
@@ -4,7 +4,7 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const index = require("../../../theme/index.cjs");
5
5
  const layout = require("../../primitives/layout.cjs");
6
6
  const Group = require("../../../node_modules/@mantine/core/esm/components/Group/Group.cjs");
7
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
7
+ const Text = require("../../primitives/Text/Text.cjs");
8
8
  const DefaultLockIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(
9
9
  "svg",
10
10
  {
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { fairmintVars, brandColors } from "../../../theme/index.js";
3
3
  import { Box } from "../../primitives/layout.js";
4
4
  import { Group } from "../../../node_modules/@mantine/core/esm/components/Group/Group.js";
5
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
5
+ import { Text } from "../../primitives/Text/Text.js";
6
6
  const DefaultLockIcon = () => /* @__PURE__ */ jsxs(
7
7
  "svg",
8
8
  {
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const format = require("../../../utils/format.cjs");
5
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
5
+ const Text = require("../../primitives/Text/Text.cjs");
6
6
  const TABULAR_NUMS = { fontVariantNumeric: "tabular-nums" };
7
7
  function Currency({ value, precise = false, currency, style, ...rest }) {
8
8
  let formatted;
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { formatPreciseWithCurrency, formatCurrencyPrecise, formatCurrency } from "../../../utils/format.js";
3
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
3
+ import { Text } from "../../primitives/Text/Text.js";
4
4
  const TABULAR_NUMS = { fontVariantNumeric: "tabular-nums" };
5
5
  function Currency({ value, precise = false, currency, style, ...rest }) {
6
6
  let formatted;
@@ -4,10 +4,19 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const index = require("../../../theme/index.cjs");
5
5
  const layout = require("../../primitives/layout.cjs");
6
6
  const Group = require("../../../node_modules/@mantine/core/esm/components/Group/Group.cjs");
7
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
7
+ const Text = require("../../primitives/Text/Text.cjs");
8
8
  function DataRow({ label, value, accent = false }) {
9
9
  return /* @__PURE__ */ jsxRuntime.jsxs(Group.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "nowrap", children: [
10
- /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { size: "sm", c: index.fairmintVars.colorTextSecondary, style: { flexShrink: 0 }, children: label }),
10
+ /* @__PURE__ */ jsxRuntime.jsx(
11
+ Text.Text,
12
+ {
13
+ size: "sm",
14
+ c: index.fairmintVars.colorTextSecondary,
15
+ style: { flexShrink: 0 },
16
+ glossary: false,
17
+ children: label
18
+ }
19
+ ),
11
20
  value === null ? /* @__PURE__ */ jsxRuntime.jsx(RedactedValue, {}) : typeof value === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
12
21
  Text.Text,
13
22
  {
@@ -16,13 +25,25 @@ function DataRow({ label, value, accent = false }) {
16
25
  c: accent ? index.fairmintVars.colorSuccessText : index.fairmintVars.colorTextPrimary,
17
26
  ta: "right",
18
27
  style: { minWidth: 0 },
28
+ glossary: false,
19
29
  children: value
20
30
  }
21
31
  ) : value
22
32
  ] });
23
33
  }
24
34
  function StackedValue({ values }) {
25
- return /* @__PURE__ */ jsxRuntime.jsx(layout.Stack, { gap: 2, align: "flex-end", children: values.map((v) => /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { size: "sm", fw: 500, c: index.fairmintVars.colorTextPrimary, ta: "right", children: v }, v)) });
35
+ return /* @__PURE__ */ jsxRuntime.jsx(layout.Stack, { gap: 2, align: "flex-end", children: values.map((v) => /* @__PURE__ */ jsxRuntime.jsx(
36
+ Text.Text,
37
+ {
38
+ size: "sm",
39
+ fw: 500,
40
+ c: index.fairmintVars.colorTextPrimary,
41
+ ta: "right",
42
+ glossary: false,
43
+ children: v
44
+ },
45
+ v
46
+ )) });
26
47
  }
27
48
  function RedactedValue({ width = 80 } = {}) {
28
49
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"DataRow.cjs","sources":["../../../../src/components/generic/DataRow/DataRow.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { fairmintVars } from \"../../../theme\";\nimport { Box, Group, Stack, Text } from \"../../primitives/layout\";\n\nexport interface DataRowProps {\n /** Left-aligned label. */\n label: string;\n /**\n * Right-aligned value.\n *\n * - `string` — rendered as styled `Text` (accent-aware).\n * - `ReactNode` — rendered as-is. Pass `<StackedValue values={...}/>`\n * for a vertical list, or any other JSX (badges, icons, links).\n * - `null` — renders a `<RedactedValue>` placeholder. No real\n * value lives in the DOM, so a pre-auth dev-tools inspection\n * reveals nothing.\n */\n value: ReactNode | null;\n /**\n * When true, a string `value` renders in success-green bold weight.\n * Use for highlighted rows like fees, carry, or \"yes\" answers.\n */\n accent?: boolean;\n}\n\n/**\n * One label / value row used by terms panels, profile sections, and\n * any \"definition list\" UX.\n *\n * The `null` → redacted placeholder convention is a security primitive:\n * when content is behind a gate, pass `null` and the placeholder shows\n * a dotted strip without leaking the real value into the DOM.\n */\nexport function DataRow({ label, value, accent = false }: DataRowProps) {\n return (\n <Group justify=\"space-between\" align=\"flex-start\" gap=\"md\" wrap=\"nowrap\">\n <Text size=\"sm\" c={fairmintVars.colorTextSecondary} style={{ flexShrink: 0 }}>\n {label}\n </Text>\n {value === null ? (\n <RedactedValue />\n ) : typeof value === \"string\" ? (\n <Text\n size=\"sm\"\n fw={accent ? 700 : 500}\n c={accent ? fairmintVars.colorSuccessText : fairmintVars.colorTextPrimary}\n ta=\"right\"\n style={{ minWidth: 0 }}\n >\n {value}\n </Text>\n ) : (\n value\n )}\n </Group>\n );\n}\n\nexport interface StackedValueProps {\n /** List of strings to render as a vertical, right-aligned stack. */\n values: ReadonlyArray<string>;\n}\n\n/**\n * Right-aligned vertical stack of values. Compose with `DataRow`\n * when a single label has multiple values (e.g., \"Funding: USDC / USDT\n * / Wire\" rendered as three lines stacked under the \"Funding\" label).\n */\nexport function StackedValue({ values }: StackedValueProps) {\n return (\n <Stack gap={2} align=\"flex-end\">\n {values.map((v) => (\n <Text key={v} size=\"sm\" fw={500} c={fairmintVars.colorTextPrimary} ta=\"right\">\n {v}\n </Text>\n ))}\n </Stack>\n );\n}\n\nexport interface RedactedValueProps {\n /** Width of the placeholder strip in pixels. @default 80 */\n width?: number;\n}\n\n/**\n * Source-safe placeholder — a fixed-width dotted strip rendered when\n * a value is gated. No real value lives in the DOM, so a pre-auth\n * dev-tools inspection reveals nothing.\n */\nexport function RedactedValue({ width = 80 }: RedactedValueProps = {}) {\n return (\n <Box\n role=\"img\"\n aria-label=\"Redacted — sign in to view\"\n style={{\n height: 14,\n width,\n borderRadius: 4,\n background: `repeating-linear-gradient(135deg, ${fairmintVars.colorBorderDefault} 0 4px, ${fairmintVars.colorBgHover} 4px 8px)`,\n }}\n />\n );\n}\n"],"names":["jsxs","Group","jsx","Text","fairmintVars","Stack","Box"],"mappings":";;;;;;;AAiCO,SAAS,QAAQ,EAAE,OAAO,OAAO,SAAS,SAAuB;AACtE,SACEA,gCAACC,MAAAA,SAAM,SAAQ,iBAAgB,OAAM,cAAa,KAAI,MAAK,MAAK,UAC9D,UAAA;AAAA,IAAAC,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAK,MAAK,GAAGC,MAAAA,aAAa,oBAAoB,OAAO,EAAE,YAAY,EAAA,GACtE,UAAA,MAAA,CACH;AAAA,IACC,UAAU,OACTF,2BAAAA,IAAC,iBAAc,IACb,OAAO,UAAU,WACnBA,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAI,SAAS,MAAM;AAAA,QACnB,GAAG,SAASC,MAAAA,aAAa,mBAAmBA,MAAAA,aAAa;AAAA,QACzD,IAAG;AAAA,QACH,OAAO,EAAE,UAAU,EAAA;AAAA,QAElB,UAAA;AAAA,MAAA;AAAA,IAAA,IAGH;AAAA,EAAA,GAEJ;AAEJ;AAYO,SAAS,aAAa,EAAE,UAA6B;AAC1D,SACEF,2BAAAA,IAACG,OAAAA,OAAA,EAAM,KAAK,GAAG,OAAM,YAClB,UAAA,OAAO,IAAI,CAAC,MACXH,2BAAAA,IAACC,KAAAA,MAAA,EAAa,MAAK,MAAK,IAAI,KAAK,GAAGC,MAAAA,aAAa,kBAAkB,IAAG,SACnE,UAAA,EAAA,GADQ,CAEX,CACD,EAAA,CACH;AAEJ;AAYO,SAAS,cAAc,EAAE,QAAQ,GAAA,IAA2B,CAAA,GAAI;AACrE,SACEF,2BAAAA;AAAAA,IAACI,OAAAA;AAAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,OAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,cAAc;AAAA,QACd,YAAY,qCAAqCF,MAAAA,aAAa,kBAAkB,WAAWA,MAAAA,aAAa,YAAY;AAAA,MAAA;AAAA,IACtH;AAAA,EAAA;AAGN;;;;"}
1
+ {"version":3,"file":"DataRow.cjs","sources":["../../../../src/components/generic/DataRow/DataRow.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { fairmintVars } from \"../../../theme\";\nimport { Box, Group, Stack, Text } from \"../../primitives/layout\";\n\nexport interface DataRowProps {\n /** Left-aligned label. */\n label: string;\n /**\n * Right-aligned value.\n *\n * - `string` — rendered as styled `Text` (accent-aware).\n * - `ReactNode` — rendered as-is. Pass `<StackedValue values={...}/>`\n * for a vertical list, or any other JSX (badges, icons, links).\n * - `null` — renders a `<RedactedValue>` placeholder. No real\n * value lives in the DOM, so a pre-auth dev-tools inspection\n * reveals nothing.\n */\n value: ReactNode | null;\n /**\n * When true, a string `value` renders in success-green bold weight.\n * Use for highlighted rows like fees, carry, or \"yes\" answers.\n */\n accent?: boolean;\n}\n\n/**\n * One label / value row used by terms panels, profile sections, and\n * any \"definition list\" UX.\n *\n * The `null` → redacted placeholder convention is a security primitive:\n * when content is behind a gate, pass `null` and the placeholder shows\n * a dotted strip without leaking the real value into the DOM.\n */\nexport function DataRow({ label, value, accent = false }: DataRowProps) {\n return (\n <Group justify=\"space-between\" align=\"flex-start\" gap=\"md\" wrap=\"nowrap\">\n <Text\n size=\"sm\"\n c={fairmintVars.colorTextSecondary}\n style={{ flexShrink: 0 }}\n glossary={false}\n >\n {label}\n </Text>\n {value === null ? (\n <RedactedValue />\n ) : typeof value === \"string\" ? (\n <Text\n size=\"sm\"\n fw={accent ? 700 : 500}\n c={accent ? fairmintVars.colorSuccessText : fairmintVars.colorTextPrimary}\n ta=\"right\"\n style={{ minWidth: 0 }}\n glossary={false}\n >\n {value}\n </Text>\n ) : (\n value\n )}\n </Group>\n );\n}\n\nexport interface StackedValueProps {\n /** List of strings to render as a vertical, right-aligned stack. */\n values: ReadonlyArray<string>;\n}\n\n/**\n * Right-aligned vertical stack of values. Compose with `DataRow`\n * when a single label has multiple values (e.g., \"Funding: USDC / USDT\n * / Wire\" rendered as three lines stacked under the \"Funding\" label).\n */\nexport function StackedValue({ values }: StackedValueProps) {\n return (\n <Stack gap={2} align=\"flex-end\">\n {values.map((v) => (\n <Text\n key={v}\n size=\"sm\"\n fw={500}\n c={fairmintVars.colorTextPrimary}\n ta=\"right\"\n glossary={false}\n >\n {v}\n </Text>\n ))}\n </Stack>\n );\n}\n\nexport interface RedactedValueProps {\n /** Width of the placeholder strip in pixels. @default 80 */\n width?: number;\n}\n\n/**\n * Source-safe placeholder — a fixed-width dotted strip rendered when\n * a value is gated. No real value lives in the DOM, so a pre-auth\n * dev-tools inspection reveals nothing.\n */\nexport function RedactedValue({ width = 80 }: RedactedValueProps = {}) {\n return (\n <Box\n role=\"img\"\n aria-label=\"Redacted — sign in to view\"\n style={{\n height: 14,\n width,\n borderRadius: 4,\n background: `repeating-linear-gradient(135deg, ${fairmintVars.colorBorderDefault} 0 4px, ${fairmintVars.colorBgHover} 4px 8px)`,\n }}\n />\n );\n}\n"],"names":["jsxs","Group","jsx","Text","fairmintVars","Stack","Box"],"mappings":";;;;;;;AAiCO,SAAS,QAAQ,EAAE,OAAO,OAAO,SAAS,SAAuB;AACtE,SACEA,gCAACC,MAAAA,SAAM,SAAQ,iBAAgB,OAAM,cAAa,KAAI,MAAK,MAAK,UAC9D,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAGC,MAAAA,aAAa;AAAA,QAChB,OAAO,EAAE,YAAY,EAAA;AAAA,QACrB,UAAU;AAAA,QAET,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,UAAU,OACTF,2BAAAA,IAAC,iBAAc,IACb,OAAO,UAAU,WACnBA,2BAAAA;AAAAA,MAACC,KAAAA;AAAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAI,SAAS,MAAM;AAAA,QACnB,GAAG,SAASC,MAAAA,aAAa,mBAAmBA,MAAAA,aAAa;AAAA,QACzD,IAAG;AAAA,QACH,OAAO,EAAE,UAAU,EAAA;AAAA,QACnB,UAAU;AAAA,QAET,UAAA;AAAA,MAAA;AAAA,IAAA,IAGH;AAAA,EAAA,GAEJ;AAEJ;AAYO,SAAS,aAAa,EAAE,UAA6B;AAC1D,SACEF,+BAACG,OAAAA,SAAM,KAAK,GAAG,OAAM,YAClB,UAAA,OAAO,IAAI,CAAC,MACXH,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MAEC,MAAK;AAAA,MACL,IAAI;AAAA,MACJ,GAAGC,MAAAA,aAAa;AAAA,MAChB,IAAG;AAAA,MACH,UAAU;AAAA,MAET,UAAA;AAAA,IAAA;AAAA,IAPI;AAAA,EAAA,CASR,GACH;AAEJ;AAYO,SAAS,cAAc,EAAE,QAAQ,GAAA,IAA2B,CAAA,GAAI;AACrE,SACEF,2BAAAA;AAAAA,IAACI,OAAAA;AAAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,OAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,cAAc;AAAA,QACd,YAAY,qCAAqCF,MAAAA,aAAa,kBAAkB,WAAWA,MAAAA,aAAa,YAAY;AAAA,MAAA;AAAA,IACtH;AAAA,EAAA;AAGN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataRow.d.ts","sourceRoot":"","sources":["../../../../src/components/generic/DataRow/DataRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE,YAAY,+BAuBrE;AAED,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,+BAUzD;AAED,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAU,EAAE,GAAE,kBAAuB,+BAapE"}
1
+ {"version":3,"file":"DataRow.d.ts","sourceRoot":"","sources":["../../../../src/components/generic/DataRow/DataRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE,YAAY,+BA6BrE;AAED,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,+BAiBzD;AAED,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAU,EAAE,GAAE,kBAAuB,+BAapE"}
@@ -2,10 +2,19 @@ import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { fairmintVars } from "../../../theme/index.js";
3
3
  import { Box, Stack } from "../../primitives/layout.js";
4
4
  import { Group } from "../../../node_modules/@mantine/core/esm/components/Group/Group.js";
5
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
5
+ import { Text } from "../../primitives/Text/Text.js";
6
6
  function DataRow({ label, value, accent = false }) {
7
7
  return /* @__PURE__ */ jsxs(Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "nowrap", children: [
8
- /* @__PURE__ */ jsx(Text, { size: "sm", c: fairmintVars.colorTextSecondary, style: { flexShrink: 0 }, children: label }),
8
+ /* @__PURE__ */ jsx(
9
+ Text,
10
+ {
11
+ size: "sm",
12
+ c: fairmintVars.colorTextSecondary,
13
+ style: { flexShrink: 0 },
14
+ glossary: false,
15
+ children: label
16
+ }
17
+ ),
9
18
  value === null ? /* @__PURE__ */ jsx(RedactedValue, {}) : typeof value === "string" ? /* @__PURE__ */ jsx(
10
19
  Text,
11
20
  {
@@ -14,13 +23,25 @@ function DataRow({ label, value, accent = false }) {
14
23
  c: accent ? fairmintVars.colorSuccessText : fairmintVars.colorTextPrimary,
15
24
  ta: "right",
16
25
  style: { minWidth: 0 },
26
+ glossary: false,
17
27
  children: value
18
28
  }
19
29
  ) : value
20
30
  ] });
21
31
  }
22
32
  function StackedValue({ values }) {
23
- return /* @__PURE__ */ jsx(Stack, { gap: 2, align: "flex-end", children: values.map((v) => /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, c: fairmintVars.colorTextPrimary, ta: "right", children: v }, v)) });
33
+ return /* @__PURE__ */ jsx(Stack, { gap: 2, align: "flex-end", children: values.map((v) => /* @__PURE__ */ jsx(
34
+ Text,
35
+ {
36
+ size: "sm",
37
+ fw: 500,
38
+ c: fairmintVars.colorTextPrimary,
39
+ ta: "right",
40
+ glossary: false,
41
+ children: v
42
+ },
43
+ v
44
+ )) });
24
45
  }
25
46
  function RedactedValue({ width = 80 } = {}) {
26
47
  return /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"DataRow.js","sources":["../../../../src/components/generic/DataRow/DataRow.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { fairmintVars } from \"../../../theme\";\nimport { Box, Group, Stack, Text } from \"../../primitives/layout\";\n\nexport interface DataRowProps {\n /** Left-aligned label. */\n label: string;\n /**\n * Right-aligned value.\n *\n * - `string` — rendered as styled `Text` (accent-aware).\n * - `ReactNode` — rendered as-is. Pass `<StackedValue values={...}/>`\n * for a vertical list, or any other JSX (badges, icons, links).\n * - `null` — renders a `<RedactedValue>` placeholder. No real\n * value lives in the DOM, so a pre-auth dev-tools inspection\n * reveals nothing.\n */\n value: ReactNode | null;\n /**\n * When true, a string `value` renders in success-green bold weight.\n * Use for highlighted rows like fees, carry, or \"yes\" answers.\n */\n accent?: boolean;\n}\n\n/**\n * One label / value row used by terms panels, profile sections, and\n * any \"definition list\" UX.\n *\n * The `null` → redacted placeholder convention is a security primitive:\n * when content is behind a gate, pass `null` and the placeholder shows\n * a dotted strip without leaking the real value into the DOM.\n */\nexport function DataRow({ label, value, accent = false }: DataRowProps) {\n return (\n <Group justify=\"space-between\" align=\"flex-start\" gap=\"md\" wrap=\"nowrap\">\n <Text size=\"sm\" c={fairmintVars.colorTextSecondary} style={{ flexShrink: 0 }}>\n {label}\n </Text>\n {value === null ? (\n <RedactedValue />\n ) : typeof value === \"string\" ? (\n <Text\n size=\"sm\"\n fw={accent ? 700 : 500}\n c={accent ? fairmintVars.colorSuccessText : fairmintVars.colorTextPrimary}\n ta=\"right\"\n style={{ minWidth: 0 }}\n >\n {value}\n </Text>\n ) : (\n value\n )}\n </Group>\n );\n}\n\nexport interface StackedValueProps {\n /** List of strings to render as a vertical, right-aligned stack. */\n values: ReadonlyArray<string>;\n}\n\n/**\n * Right-aligned vertical stack of values. Compose with `DataRow`\n * when a single label has multiple values (e.g., \"Funding: USDC / USDT\n * / Wire\" rendered as three lines stacked under the \"Funding\" label).\n */\nexport function StackedValue({ values }: StackedValueProps) {\n return (\n <Stack gap={2} align=\"flex-end\">\n {values.map((v) => (\n <Text key={v} size=\"sm\" fw={500} c={fairmintVars.colorTextPrimary} ta=\"right\">\n {v}\n </Text>\n ))}\n </Stack>\n );\n}\n\nexport interface RedactedValueProps {\n /** Width of the placeholder strip in pixels. @default 80 */\n width?: number;\n}\n\n/**\n * Source-safe placeholder — a fixed-width dotted strip rendered when\n * a value is gated. No real value lives in the DOM, so a pre-auth\n * dev-tools inspection reveals nothing.\n */\nexport function RedactedValue({ width = 80 }: RedactedValueProps = {}) {\n return (\n <Box\n role=\"img\"\n aria-label=\"Redacted — sign in to view\"\n style={{\n height: 14,\n width,\n borderRadius: 4,\n background: `repeating-linear-gradient(135deg, ${fairmintVars.colorBorderDefault} 0 4px, ${fairmintVars.colorBgHover} 4px 8px)`,\n }}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAiCO,SAAS,QAAQ,EAAE,OAAO,OAAO,SAAS,SAAuB;AACtE,SACE,qBAAC,SAAM,SAAQ,iBAAgB,OAAM,cAAa,KAAI,MAAK,MAAK,UAC9D,UAAA;AAAA,IAAA,oBAAC,MAAA,EAAK,MAAK,MAAK,GAAG,aAAa,oBAAoB,OAAO,EAAE,YAAY,EAAA,GACtE,UAAA,MAAA,CACH;AAAA,IACC,UAAU,OACT,oBAAC,iBAAc,IACb,OAAO,UAAU,WACnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAI,SAAS,MAAM;AAAA,QACnB,GAAG,SAAS,aAAa,mBAAmB,aAAa;AAAA,QACzD,IAAG;AAAA,QACH,OAAO,EAAE,UAAU,EAAA;AAAA,QAElB,UAAA;AAAA,MAAA;AAAA,IAAA,IAGH;AAAA,EAAA,GAEJ;AAEJ;AAYO,SAAS,aAAa,EAAE,UAA6B;AAC1D,SACE,oBAAC,OAAA,EAAM,KAAK,GAAG,OAAM,YAClB,UAAA,OAAO,IAAI,CAAC,MACX,oBAAC,MAAA,EAAa,MAAK,MAAK,IAAI,KAAK,GAAG,aAAa,kBAAkB,IAAG,SACnE,UAAA,EAAA,GADQ,CAEX,CACD,EAAA,CACH;AAEJ;AAYO,SAAS,cAAc,EAAE,QAAQ,GAAA,IAA2B,CAAA,GAAI;AACrE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,OAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,cAAc;AAAA,QACd,YAAY,qCAAqC,aAAa,kBAAkB,WAAW,aAAa,YAAY;AAAA,MAAA;AAAA,IACtH;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"DataRow.js","sources":["../../../../src/components/generic/DataRow/DataRow.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { fairmintVars } from \"../../../theme\";\nimport { Box, Group, Stack, Text } from \"../../primitives/layout\";\n\nexport interface DataRowProps {\n /** Left-aligned label. */\n label: string;\n /**\n * Right-aligned value.\n *\n * - `string` — rendered as styled `Text` (accent-aware).\n * - `ReactNode` — rendered as-is. Pass `<StackedValue values={...}/>`\n * for a vertical list, or any other JSX (badges, icons, links).\n * - `null` — renders a `<RedactedValue>` placeholder. No real\n * value lives in the DOM, so a pre-auth dev-tools inspection\n * reveals nothing.\n */\n value: ReactNode | null;\n /**\n * When true, a string `value` renders in success-green bold weight.\n * Use for highlighted rows like fees, carry, or \"yes\" answers.\n */\n accent?: boolean;\n}\n\n/**\n * One label / value row used by terms panels, profile sections, and\n * any \"definition list\" UX.\n *\n * The `null` → redacted placeholder convention is a security primitive:\n * when content is behind a gate, pass `null` and the placeholder shows\n * a dotted strip without leaking the real value into the DOM.\n */\nexport function DataRow({ label, value, accent = false }: DataRowProps) {\n return (\n <Group justify=\"space-between\" align=\"flex-start\" gap=\"md\" wrap=\"nowrap\">\n <Text\n size=\"sm\"\n c={fairmintVars.colorTextSecondary}\n style={{ flexShrink: 0 }}\n glossary={false}\n >\n {label}\n </Text>\n {value === null ? (\n <RedactedValue />\n ) : typeof value === \"string\" ? (\n <Text\n size=\"sm\"\n fw={accent ? 700 : 500}\n c={accent ? fairmintVars.colorSuccessText : fairmintVars.colorTextPrimary}\n ta=\"right\"\n style={{ minWidth: 0 }}\n glossary={false}\n >\n {value}\n </Text>\n ) : (\n value\n )}\n </Group>\n );\n}\n\nexport interface StackedValueProps {\n /** List of strings to render as a vertical, right-aligned stack. */\n values: ReadonlyArray<string>;\n}\n\n/**\n * Right-aligned vertical stack of values. Compose with `DataRow`\n * when a single label has multiple values (e.g., \"Funding: USDC / USDT\n * / Wire\" rendered as three lines stacked under the \"Funding\" label).\n */\nexport function StackedValue({ values }: StackedValueProps) {\n return (\n <Stack gap={2} align=\"flex-end\">\n {values.map((v) => (\n <Text\n key={v}\n size=\"sm\"\n fw={500}\n c={fairmintVars.colorTextPrimary}\n ta=\"right\"\n glossary={false}\n >\n {v}\n </Text>\n ))}\n </Stack>\n );\n}\n\nexport interface RedactedValueProps {\n /** Width of the placeholder strip in pixels. @default 80 */\n width?: number;\n}\n\n/**\n * Source-safe placeholder — a fixed-width dotted strip rendered when\n * a value is gated. No real value lives in the DOM, so a pre-auth\n * dev-tools inspection reveals nothing.\n */\nexport function RedactedValue({ width = 80 }: RedactedValueProps = {}) {\n return (\n <Box\n role=\"img\"\n aria-label=\"Redacted — sign in to view\"\n style={{\n height: 14,\n width,\n borderRadius: 4,\n background: `repeating-linear-gradient(135deg, ${fairmintVars.colorBorderDefault} 0 4px, ${fairmintVars.colorBgHover} 4px 8px)`,\n }}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAiCO,SAAS,QAAQ,EAAE,OAAO,OAAO,SAAS,SAAuB;AACtE,SACE,qBAAC,SAAM,SAAQ,iBAAgB,OAAM,cAAa,KAAI,MAAK,MAAK,UAC9D,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAG,aAAa;AAAA,QAChB,OAAO,EAAE,YAAY,EAAA;AAAA,QACrB,UAAU;AAAA,QAET,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,UAAU,OACT,oBAAC,iBAAc,IACb,OAAO,UAAU,WACnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAI,SAAS,MAAM;AAAA,QACnB,GAAG,SAAS,aAAa,mBAAmB,aAAa;AAAA,QACzD,IAAG;AAAA,QACH,OAAO,EAAE,UAAU,EAAA;AAAA,QACnB,UAAU;AAAA,QAET,UAAA;AAAA,MAAA;AAAA,IAAA,IAGH;AAAA,EAAA,GAEJ;AAEJ;AAYO,SAAS,aAAa,EAAE,UAA6B;AAC1D,SACE,oBAAC,SAAM,KAAK,GAAG,OAAM,YAClB,UAAA,OAAO,IAAI,CAAC,MACX;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,MAAK;AAAA,MACL,IAAI;AAAA,MACJ,GAAG,aAAa;AAAA,MAChB,IAAG;AAAA,MACH,UAAU;AAAA,MAET,UAAA;AAAA,IAAA;AAAA,IAPI;AAAA,EAAA,CASR,GACH;AAEJ;AAYO,SAAS,cAAc,EAAE,QAAQ,GAAA,IAA2B,CAAA,GAAI;AACrE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,OAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,cAAc;AAAA,QACd,YAAY,qCAAqC,aAAa,kBAAkB,WAAW,aAAa,YAAY;AAAA,MAAA;AAAA,IACtH;AAAA,EAAA;AAGN;"}
@@ -8,7 +8,7 @@ const Table = require("../../primitives/Table/Table.cjs");
8
8
  const EmptyState = require("../EmptyState/EmptyState.cjs");
9
9
  const UnstyledButton = require("../../../node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.cjs");
10
10
  const Group = require("../../../node_modules/@mantine/core/esm/components/Group/Group.cjs");
11
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
11
+ const Text = require("../../primitives/Text/Text.cjs");
12
12
  const SortIcon = ({ direction }) => /* @__PURE__ */ jsxRuntime.jsxs(
13
13
  "svg",
14
14
  {
@@ -72,7 +72,7 @@ function DataTable({
72
72
  }
73
73
  return /* @__PURE__ */ jsxRuntime.jsxs(Table.Table, { responsive: true, children: [
74
74
  /* @__PURE__ */ jsxRuntime.jsx(Table.Table.Thead, { children: /* @__PURE__ */ jsxRuntime.jsx(Table.Table.Tr, { children: columns.map((col) => /* @__PURE__ */ jsxRuntime.jsx(Table.Table.Th, { w: col.width, children: col.sortable ? /* @__PURE__ */ jsxRuntime.jsx(UnstyledButton.UnstyledButton, { onClick: () => handleSort(col.key), children: /* @__PURE__ */ jsxRuntime.jsxs(Group.Group, { gap: 4, wrap: "nowrap", children: [
75
- /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { size: "xs", fw: 600, tt: "uppercase", children: col.label }),
75
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { glossary: false, size: "xs", fw: 600, tt: "uppercase", children: col.label }),
76
76
  /* @__PURE__ */ jsxRuntime.jsx(SortIcon, { direction: sortKey === col.key ? sortDir : null })
77
77
  ] }) }) : col.label }, col.key)) }) }),
78
78
  /* @__PURE__ */ jsxRuntime.jsx(Table.Table.Tbody, { children: sortedData.map((row) => {
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.cjs","sources":["../../../../src/components/generic/DataTable/DataTable.tsx"],"sourcesContent":["import { type ReactNode, useMemo, useState } from \"react\";\nimport { Group, Stack, Text, UnstyledButton } from \"../../primitives/layout\";\nimport { Skeleton } from \"../../primitives/Skeleton/Skeleton\";\nimport { Table } from \"../../primitives/Table/Table\";\nimport { EmptyState } from \"../EmptyState/EmptyState\";\n\nexport interface DataTableColumn<T extends Record<string, unknown>> {\n /** Unique key matching a property in the data row. */\n key: string;\n /** Column header label. */\n label: string;\n /** Custom render function for the cell. */\n render?: (row: T) => ReactNode;\n /** Whether this column is sortable. @default false */\n sortable?: boolean;\n /** Column width (CSS value). */\n width?: string | number;\n}\n\nexport interface DataTableProps<T extends Record<string, unknown>> {\n /** Column definitions. */\n columns: DataTableColumn<T>[];\n /** Data rows. */\n data: T[];\n /** Unique key for each row. @default \"id\" */\n rowKey?: string;\n /** Whether data is loading. @default false */\n loading?: boolean;\n /** Number of skeleton rows to show when loading. @default 5 */\n loadingRows?: number;\n /** Empty state title. @default \"No data\" */\n emptyTitle?: string;\n /** Empty state description. */\n emptyDescription?: string;\n /** Empty state icon. */\n emptyIcon?: ReactNode;\n /** Row click handler. */\n onRowClick?: (row: T) => void;\n /** Controlled sort callback. When provided, skips internal sort. */\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n}\n\nconst SortIcon = ({ direction }: { direction: \"asc\" | \"desc\" | null }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n opacity: direction ? 1 : 0.3,\n transform: direction === \"desc\" ? \"rotate(180deg)\" : undefined,\n transition: \"transform 0.15s ease, opacity 0.15s ease\",\n }}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n);\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n rowKey = \"id\",\n loading = false,\n loadingRows = 5,\n emptyTitle = \"No data\",\n emptyDescription,\n emptyIcon,\n onRowClick,\n onSortChange,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n\n const handleSort = (key: string) => {\n const newDir = sortKey === key && sortDir === \"asc\" ? \"desc\" : \"asc\";\n setSortKey(key);\n setSortDir(newDir);\n onSortChange?.(key, newDir);\n };\n\n const sortedData = useMemo(() => {\n if (onSortChange || !sortKey) return data;\n return [...data].sort((a, b) => {\n const aVal = a[sortKey];\n const bVal = b[sortKey];\n if (aVal === bVal) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp = aVal < bVal ? -1 : 1;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }, [data, sortKey, sortDir, onSortChange]);\n\n if (loading) {\n return (\n <Stack gap=\"xs\">\n {Array.from({ length: loadingRows }, (_, i) => (\n <Skeleton key={`skeleton-${i.toString()}`} height={48} radius=\"sm\" />\n ))}\n </Stack>\n );\n }\n\n if (data.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} icon={emptyIcon} />;\n }\n\n return (\n <Table responsive>\n <Table.Thead>\n <Table.Tr>\n {columns.map((col) => (\n <Table.Th key={col.key} w={col.width}>\n {col.sortable ? (\n <UnstyledButton onClick={() => handleSort(col.key)}>\n <Group gap={4} wrap=\"nowrap\">\n <Text size=\"xs\" fw={600} tt=\"uppercase\">\n {col.label}\n </Text>\n <SortIcon direction={sortKey === col.key ? sortDir : null} />\n </Group>\n </UnstyledButton>\n ) : (\n col.label\n )}\n </Table.Th>\n ))}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {sortedData.map((row) => {\n const key = String(row[rowKey] ?? sortedData.indexOf(row));\n return (\n <Table.Tr\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"fairmint-table-row-clickable\" : undefined}\n >\n {columns.map((col) => (\n <Table.Td key={col.key}>\n {col.render ? col.render(row) : String(row[col.key] ?? \"\")}\n </Table.Td>\n ))}\n </Table.Tr>\n );\n })}\n </Table.Tbody>\n </Table>\n );\n}\n"],"names":["jsxs","jsx","useState","useMemo","Stack","Skeleton","EmptyState","Table","UnstyledButton","Group","Text"],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.cjs","sources":["../../../../src/components/generic/DataTable/DataTable.tsx"],"sourcesContent":["import { type ReactNode, useMemo, useState } from \"react\";\nimport { Group, Stack, Text, UnstyledButton } from \"../../primitives/layout\";\nimport { Skeleton } from \"../../primitives/Skeleton/Skeleton\";\nimport { Table } from \"../../primitives/Table/Table\";\nimport { EmptyState } from \"../EmptyState/EmptyState\";\n\nexport interface DataTableColumn<T extends Record<string, unknown>> {\n /** Unique key matching a property in the data row. */\n key: string;\n /** Column header label. */\n label: string;\n /** Custom render function for the cell. */\n render?: (row: T) => ReactNode;\n /** Whether this column is sortable. @default false */\n sortable?: boolean;\n /** Column width (CSS value). */\n width?: string | number;\n}\n\nexport interface DataTableProps<T extends Record<string, unknown>> {\n /** Column definitions. */\n columns: DataTableColumn<T>[];\n /** Data rows. */\n data: T[];\n /** Unique key for each row. @default \"id\" */\n rowKey?: string;\n /** Whether data is loading. @default false */\n loading?: boolean;\n /** Number of skeleton rows to show when loading. @default 5 */\n loadingRows?: number;\n /** Empty state title. @default \"No data\" */\n emptyTitle?: string;\n /** Empty state description. */\n emptyDescription?: string;\n /** Empty state icon. */\n emptyIcon?: ReactNode;\n /** Row click handler. */\n onRowClick?: (row: T) => void;\n /** Controlled sort callback. When provided, skips internal sort. */\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n}\n\nconst SortIcon = ({ direction }: { direction: \"asc\" | \"desc\" | null }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n opacity: direction ? 1 : 0.3,\n transform: direction === \"desc\" ? \"rotate(180deg)\" : undefined,\n transition: \"transform 0.15s ease, opacity 0.15s ease\",\n }}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n);\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n rowKey = \"id\",\n loading = false,\n loadingRows = 5,\n emptyTitle = \"No data\",\n emptyDescription,\n emptyIcon,\n onRowClick,\n onSortChange,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n\n const handleSort = (key: string) => {\n const newDir = sortKey === key && sortDir === \"asc\" ? \"desc\" : \"asc\";\n setSortKey(key);\n setSortDir(newDir);\n onSortChange?.(key, newDir);\n };\n\n const sortedData = useMemo(() => {\n if (onSortChange || !sortKey) return data;\n return [...data].sort((a, b) => {\n const aVal = a[sortKey];\n const bVal = b[sortKey];\n if (aVal === bVal) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp = aVal < bVal ? -1 : 1;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }, [data, sortKey, sortDir, onSortChange]);\n\n if (loading) {\n return (\n <Stack gap=\"xs\">\n {Array.from({ length: loadingRows }, (_, i) => (\n <Skeleton key={`skeleton-${i.toString()}`} height={48} radius=\"sm\" />\n ))}\n </Stack>\n );\n }\n\n if (data.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} icon={emptyIcon} />;\n }\n\n return (\n <Table responsive>\n <Table.Thead>\n <Table.Tr>\n {columns.map((col) => (\n <Table.Th key={col.key} w={col.width}>\n {col.sortable ? (\n <UnstyledButton onClick={() => handleSort(col.key)}>\n <Group gap={4} wrap=\"nowrap\">\n <Text glossary={false} size=\"xs\" fw={600} tt=\"uppercase\">\n {col.label}\n </Text>\n <SortIcon direction={sortKey === col.key ? sortDir : null} />\n </Group>\n </UnstyledButton>\n ) : (\n col.label\n )}\n </Table.Th>\n ))}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {sortedData.map((row) => {\n const key = String(row[rowKey] ?? sortedData.indexOf(row));\n return (\n <Table.Tr\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"fairmint-table-row-clickable\" : undefined}\n >\n {columns.map((col) => (\n <Table.Td key={col.key}>\n {col.render ? col.render(row) : String(row[col.key] ?? \"\")}\n </Table.Td>\n ))}\n </Table.Tr>\n );\n })}\n </Table.Tbody>\n </Table>\n );\n}\n"],"names":["jsxs","jsx","useState","useMemo","Stack","Skeleton","EmptyState","Table","UnstyledButton","Group","Text"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { Table } from "../../primitives/Table/Table.js";
6
6
  import { EmptyState } from "../EmptyState/EmptyState.js";
7
7
  import { UnstyledButton } from "../../../node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.js";
8
8
  import { Group } from "../../../node_modules/@mantine/core/esm/components/Group/Group.js";
9
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
9
+ import { Text } from "../../primitives/Text/Text.js";
10
10
  const SortIcon = ({ direction }) => /* @__PURE__ */ jsxs(
11
11
  "svg",
12
12
  {
@@ -70,7 +70,7 @@ function DataTable({
70
70
  }
71
71
  return /* @__PURE__ */ jsxs(Table, { responsive: true, children: [
72
72
  /* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsx(Table.Tr, { children: columns.map((col) => /* @__PURE__ */ jsx(Table.Th, { w: col.width, children: col.sortable ? /* @__PURE__ */ jsx(UnstyledButton, { onClick: () => handleSort(col.key), children: /* @__PURE__ */ jsxs(Group, { gap: 4, wrap: "nowrap", children: [
73
- /* @__PURE__ */ jsx(Text, { size: "xs", fw: 600, tt: "uppercase", children: col.label }),
73
+ /* @__PURE__ */ jsx(Text, { glossary: false, size: "xs", fw: 600, tt: "uppercase", children: col.label }),
74
74
  /* @__PURE__ */ jsx(SortIcon, { direction: sortKey === col.key ? sortDir : null })
75
75
  ] }) }) : col.label }, col.key)) }) }),
76
76
  /* @__PURE__ */ jsx(Table.Tbody, { children: sortedData.map((row) => {
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sources":["../../../../src/components/generic/DataTable/DataTable.tsx"],"sourcesContent":["import { type ReactNode, useMemo, useState } from \"react\";\nimport { Group, Stack, Text, UnstyledButton } from \"../../primitives/layout\";\nimport { Skeleton } from \"../../primitives/Skeleton/Skeleton\";\nimport { Table } from \"../../primitives/Table/Table\";\nimport { EmptyState } from \"../EmptyState/EmptyState\";\n\nexport interface DataTableColumn<T extends Record<string, unknown>> {\n /** Unique key matching a property in the data row. */\n key: string;\n /** Column header label. */\n label: string;\n /** Custom render function for the cell. */\n render?: (row: T) => ReactNode;\n /** Whether this column is sortable. @default false */\n sortable?: boolean;\n /** Column width (CSS value). */\n width?: string | number;\n}\n\nexport interface DataTableProps<T extends Record<string, unknown>> {\n /** Column definitions. */\n columns: DataTableColumn<T>[];\n /** Data rows. */\n data: T[];\n /** Unique key for each row. @default \"id\" */\n rowKey?: string;\n /** Whether data is loading. @default false */\n loading?: boolean;\n /** Number of skeleton rows to show when loading. @default 5 */\n loadingRows?: number;\n /** Empty state title. @default \"No data\" */\n emptyTitle?: string;\n /** Empty state description. */\n emptyDescription?: string;\n /** Empty state icon. */\n emptyIcon?: ReactNode;\n /** Row click handler. */\n onRowClick?: (row: T) => void;\n /** Controlled sort callback. When provided, skips internal sort. */\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n}\n\nconst SortIcon = ({ direction }: { direction: \"asc\" | \"desc\" | null }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n opacity: direction ? 1 : 0.3,\n transform: direction === \"desc\" ? \"rotate(180deg)\" : undefined,\n transition: \"transform 0.15s ease, opacity 0.15s ease\",\n }}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n);\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n rowKey = \"id\",\n loading = false,\n loadingRows = 5,\n emptyTitle = \"No data\",\n emptyDescription,\n emptyIcon,\n onRowClick,\n onSortChange,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n\n const handleSort = (key: string) => {\n const newDir = sortKey === key && sortDir === \"asc\" ? \"desc\" : \"asc\";\n setSortKey(key);\n setSortDir(newDir);\n onSortChange?.(key, newDir);\n };\n\n const sortedData = useMemo(() => {\n if (onSortChange || !sortKey) return data;\n return [...data].sort((a, b) => {\n const aVal = a[sortKey];\n const bVal = b[sortKey];\n if (aVal === bVal) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp = aVal < bVal ? -1 : 1;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }, [data, sortKey, sortDir, onSortChange]);\n\n if (loading) {\n return (\n <Stack gap=\"xs\">\n {Array.from({ length: loadingRows }, (_, i) => (\n <Skeleton key={`skeleton-${i.toString()}`} height={48} radius=\"sm\" />\n ))}\n </Stack>\n );\n }\n\n if (data.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} icon={emptyIcon} />;\n }\n\n return (\n <Table responsive>\n <Table.Thead>\n <Table.Tr>\n {columns.map((col) => (\n <Table.Th key={col.key} w={col.width}>\n {col.sortable ? (\n <UnstyledButton onClick={() => handleSort(col.key)}>\n <Group gap={4} wrap=\"nowrap\">\n <Text size=\"xs\" fw={600} tt=\"uppercase\">\n {col.label}\n </Text>\n <SortIcon direction={sortKey === col.key ? sortDir : null} />\n </Group>\n </UnstyledButton>\n ) : (\n col.label\n )}\n </Table.Th>\n ))}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {sortedData.map((row) => {\n const key = String(row[rowKey] ?? sortedData.indexOf(row));\n return (\n <Table.Tr\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"fairmint-table-row-clickable\" : undefined}\n >\n {columns.map((col) => (\n <Table.Td key={col.key}>\n {col.render ? col.render(row) : String(row[col.key] ?? \"\")}\n </Table.Td>\n ))}\n </Table.Tr>\n );\n })}\n </Table.Tbody>\n </Table>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","sources":["../../../../src/components/generic/DataTable/DataTable.tsx"],"sourcesContent":["import { type ReactNode, useMemo, useState } from \"react\";\nimport { Group, Stack, Text, UnstyledButton } from \"../../primitives/layout\";\nimport { Skeleton } from \"../../primitives/Skeleton/Skeleton\";\nimport { Table } from \"../../primitives/Table/Table\";\nimport { EmptyState } from \"../EmptyState/EmptyState\";\n\nexport interface DataTableColumn<T extends Record<string, unknown>> {\n /** Unique key matching a property in the data row. */\n key: string;\n /** Column header label. */\n label: string;\n /** Custom render function for the cell. */\n render?: (row: T) => ReactNode;\n /** Whether this column is sortable. @default false */\n sortable?: boolean;\n /** Column width (CSS value). */\n width?: string | number;\n}\n\nexport interface DataTableProps<T extends Record<string, unknown>> {\n /** Column definitions. */\n columns: DataTableColumn<T>[];\n /** Data rows. */\n data: T[];\n /** Unique key for each row. @default \"id\" */\n rowKey?: string;\n /** Whether data is loading. @default false */\n loading?: boolean;\n /** Number of skeleton rows to show when loading. @default 5 */\n loadingRows?: number;\n /** Empty state title. @default \"No data\" */\n emptyTitle?: string;\n /** Empty state description. */\n emptyDescription?: string;\n /** Empty state icon. */\n emptyIcon?: ReactNode;\n /** Row click handler. */\n onRowClick?: (row: T) => void;\n /** Controlled sort callback. When provided, skips internal sort. */\n onSortChange?: (key: string, direction: \"asc\" | \"desc\") => void;\n}\n\nconst SortIcon = ({ direction }: { direction: \"asc\" | \"desc\" | null }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n opacity: direction ? 1 : 0.3,\n transform: direction === \"desc\" ? \"rotate(180deg)\" : undefined,\n transition: \"transform 0.15s ease, opacity 0.15s ease\",\n }}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n);\n\nexport function DataTable<T extends Record<string, unknown>>({\n columns,\n data,\n rowKey = \"id\",\n loading = false,\n loadingRows = 5,\n emptyTitle = \"No data\",\n emptyDescription,\n emptyIcon,\n onRowClick,\n onSortChange,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<\"asc\" | \"desc\">(\"asc\");\n\n const handleSort = (key: string) => {\n const newDir = sortKey === key && sortDir === \"asc\" ? \"desc\" : \"asc\";\n setSortKey(key);\n setSortDir(newDir);\n onSortChange?.(key, newDir);\n };\n\n const sortedData = useMemo(() => {\n if (onSortChange || !sortKey) return data;\n return [...data].sort((a, b) => {\n const aVal = a[sortKey];\n const bVal = b[sortKey];\n if (aVal === bVal) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp = aVal < bVal ? -1 : 1;\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }, [data, sortKey, sortDir, onSortChange]);\n\n if (loading) {\n return (\n <Stack gap=\"xs\">\n {Array.from({ length: loadingRows }, (_, i) => (\n <Skeleton key={`skeleton-${i.toString()}`} height={48} radius=\"sm\" />\n ))}\n </Stack>\n );\n }\n\n if (data.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} icon={emptyIcon} />;\n }\n\n return (\n <Table responsive>\n <Table.Thead>\n <Table.Tr>\n {columns.map((col) => (\n <Table.Th key={col.key} w={col.width}>\n {col.sortable ? (\n <UnstyledButton onClick={() => handleSort(col.key)}>\n <Group gap={4} wrap=\"nowrap\">\n <Text glossary={false} size=\"xs\" fw={600} tt=\"uppercase\">\n {col.label}\n </Text>\n <SortIcon direction={sortKey === col.key ? sortDir : null} />\n </Group>\n </UnstyledButton>\n ) : (\n col.label\n )}\n </Table.Th>\n ))}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {sortedData.map((row) => {\n const key = String(row[rowKey] ?? sortedData.indexOf(row));\n return (\n <Table.Tr\n key={key}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"fairmint-table-row-clickable\" : undefined}\n >\n {columns.map((col) => (\n <Table.Td key={col.key}>\n {col.render ? col.render(row) : String(row[col.key] ?? \"\")}\n </Table.Td>\n ))}\n </Table.Tr>\n );\n })}\n </Table.Tbody>\n </Table>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const format = require("../../../utils/format.cjs");
5
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
5
+ const Text = require("../../primitives/Text/Text.cjs");
6
6
  function DateDisplay({ value, ...rest }) {
7
7
  return /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { component: "span", ...rest, children: format.formatDate(value) });
8
8
  }
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { formatDate } from "../../../utils/format.js";
3
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
3
+ import { Text } from "../../primitives/Text/Text.js";
4
4
  function DateDisplay({ value, ...rest }) {
5
5
  return /* @__PURE__ */ jsx(Text, { component: "span", ...rest, children: formatDate(value) });
6
6
  }
@@ -5,7 +5,7 @@ const index = require("../../../theme/index.cjs");
5
5
  const Loader = require("../../primitives/Loader/Loader.cjs");
6
6
  const layout = require("../../primitives/layout.cjs");
7
7
  const Group = require("../../../node_modules/@mantine/core/esm/components/Group/Group.cjs");
8
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
8
+ const Text = require("../../primitives/Text/Text.cjs");
9
9
  const UnstyledButton = require("../../../node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.cjs");
10
10
  const ThemeIcon = require("../../../node_modules/@mantine/core/esm/components/ThemeIcon/ThemeIcon.cjs");
11
11
  function DefaultFileIcon() {
@@ -3,7 +3,7 @@ import { fairmintVars } from "../../../theme/index.js";
3
3
  import { Loader } from "../../primitives/Loader/Loader.js";
4
4
  import { Box, Stack } from "../../primitives/layout.js";
5
5
  import { Group } from "../../../node_modules/@mantine/core/esm/components/Group/Group.js";
6
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
6
+ import { Text } from "../../primitives/Text/Text.js";
7
7
  import { UnstyledButton } from "../../../node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.js";
8
8
  import { ThemeIcon } from "../../../node_modules/@mantine/core/esm/components/ThemeIcon/ThemeIcon.js";
9
9
  function DefaultFileIcon() {
@@ -7,7 +7,7 @@ const ActionIcon = require("../../primitives/ActionIcon/ActionIcon.cjs");
7
7
  const Button = require("../../primitives/Button/Button.cjs");
8
8
  const layout = require("../../primitives/layout.cjs");
9
9
  const Group = require("../../../node_modules/@mantine/core/esm/components/Group/Group.cjs");
10
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
10
+ const Text = require("../../primitives/Text/Text.cjs");
11
11
  function EditableSection({
12
12
  title,
13
13
  readView,
@@ -5,7 +5,7 @@ import { ActionIcon } from "../../primitives/ActionIcon/ActionIcon.js";
5
5
  import { Button } from "../../primitives/Button/Button.js";
6
6
  import { Stack } from "../../primitives/layout.js";
7
7
  import { Group } from "../../../node_modules/@mantine/core/esm/components/Group/Group.js";
8
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
8
+ import { Text } from "../../primitives/Text/Text.js";
9
9
  function EditableSection({
10
10
  title,
11
11
  readView,
@@ -5,7 +5,7 @@ const colors = require("../../../theme/colors.cjs");
5
5
  const Avatar = require("../../primitives/Avatar/Avatar.cjs");
6
6
  const Button = require("../../primitives/Button/Button.cjs");
7
7
  const layout = require("../../primitives/layout.cjs");
8
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
8
+ const Text = require("../../primitives/Text/Text.cjs");
9
9
  const EMPTY_STATE_AVATAR_SIZE = 56;
10
10
  const EMPTY_STATE_ICON_SIZE = 28;
11
11
  function EmptyStateAvatar({ avatar, icon }) {
@@ -3,7 +3,7 @@ import { colors } from "../../../theme/colors.js";
3
3
  import { Avatar } from "../../primitives/Avatar/Avatar.js";
4
4
  import { Button } from "../../primitives/Button/Button.js";
5
5
  import { Stack } from "../../primitives/layout.js";
6
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
6
+ import { Text } from "../../primitives/Text/Text.js";
7
7
  const EMPTY_STATE_AVATAR_SIZE = 56;
8
8
  const EMPTY_STATE_ICON_SIZE = 28;
9
9
  function EmptyStateAvatar({ avatar, icon }) {
@@ -7,7 +7,7 @@ const Button = require("../../primitives/Button/Button.cjs");
7
7
  const layout = require("../../primitives/layout.cjs");
8
8
  const Flex = require("../../../node_modules/@mantine/core/esm/components/Flex/Flex.cjs");
9
9
  const Title = require("../../../node_modules/@mantine/core/esm/components/Title/Title.cjs");
10
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
10
+ const Text = require("../../primitives/Text/Text.cjs");
11
11
  const ERROR_CONFIGS = {
12
12
  400: {
13
13
  title: "Bad request",
@@ -5,7 +5,7 @@ import { Button } from "../../primitives/Button/Button.js";
5
5
  import { Box, Container, Stack } from "../../primitives/layout.js";
6
6
  import { Flex } from "../../../node_modules/@mantine/core/esm/components/Flex/Flex.js";
7
7
  import { Title } from "../../../node_modules/@mantine/core/esm/components/Title/Title.js";
8
- import { Text } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
8
+ import { Text } from "../../primitives/Text/Text.js";
9
9
  const ERROR_CONFIGS = {
10
10
  400: {
11
11
  title: "Bad request",
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const index = require("../../../theme/index.cjs");
5
- const Text = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
5
+ const Text = require("../../primitives/Text/Text.cjs");
6
6
  function Eyebrow({
7
7
  children,
8
8
  size = "xs",