@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.
- package/dist/components/BrandedLoadingScreen/BrandedLoadingScreen.cjs +1 -1
- package/dist/components/BrandedLoadingScreen/BrandedLoadingScreen.js +1 -1
- package/dist/components/ErrorFallback/ErrorFallback.cjs +1 -1
- package/dist/components/ErrorFallback/ErrorFallback.js +1 -1
- package/dist/components/form/FormField.cjs +1 -1
- package/dist/components/form/FormField.js +1 -1
- package/dist/components/generic/AgentSuggestion/AgentSuggestion.cjs +1 -1
- package/dist/components/generic/AgentSuggestion/AgentSuggestion.js +1 -1
- package/dist/components/generic/Banner/Banner.cjs +1 -1
- package/dist/components/generic/Banner/Banner.js +1 -1
- package/dist/components/generic/BottomSheet/BottomSheet.cjs +1 -1
- package/dist/components/generic/BottomSheet/BottomSheet.js +1 -1
- package/dist/components/generic/CompanyBanner/CompanyBanner.cjs +1 -1
- package/dist/components/generic/CompanyBanner/CompanyBanner.js +1 -1
- package/dist/components/generic/ConfidentialityBanner/ConfidentialityBanner.cjs +1 -1
- package/dist/components/generic/ConfidentialityBanner/ConfidentialityBanner.js +1 -1
- package/dist/components/generic/Currency/Currency.cjs +1 -1
- package/dist/components/generic/Currency/Currency.js +1 -1
- package/dist/components/generic/DataRow/DataRow.cjs +24 -3
- package/dist/components/generic/DataRow/DataRow.cjs.map +1 -1
- package/dist/components/generic/DataRow/DataRow.d.ts.map +1 -1
- package/dist/components/generic/DataRow/DataRow.js +24 -3
- package/dist/components/generic/DataRow/DataRow.js.map +1 -1
- package/dist/components/generic/DataTable/DataTable.cjs +2 -2
- package/dist/components/generic/DataTable/DataTable.cjs.map +1 -1
- package/dist/components/generic/DataTable/DataTable.js +2 -2
- package/dist/components/generic/DataTable/DataTable.js.map +1 -1
- package/dist/components/generic/DateDisplay/DateDisplay.cjs +1 -1
- package/dist/components/generic/DateDisplay/DateDisplay.js +1 -1
- package/dist/components/generic/DocumentRow/DocumentRow.cjs +1 -1
- package/dist/components/generic/DocumentRow/DocumentRow.js +1 -1
- package/dist/components/generic/EditableSection/EditableSection.cjs +1 -1
- package/dist/components/generic/EditableSection/EditableSection.js +1 -1
- package/dist/components/generic/EmptyState/EmptyState.cjs +1 -1
- package/dist/components/generic/EmptyState/EmptyState.js +1 -1
- package/dist/components/generic/ErrorPage/ErrorPage.cjs +1 -1
- package/dist/components/generic/ErrorPage/ErrorPage.js +1 -1
- package/dist/components/generic/Eyebrow/Eyebrow.cjs +1 -1
- package/dist/components/generic/Eyebrow/Eyebrow.js +1 -1
- package/dist/components/generic/FileDropzone/FileDropzone.cjs +1 -1
- package/dist/components/generic/FileDropzone/FileDropzone.js +1 -1
- package/dist/components/generic/ListRow/ListRow.cjs +5 -4
- package/dist/components/generic/ListRow/ListRow.cjs.map +1 -1
- package/dist/components/generic/ListRow/ListRow.d.ts.map +1 -1
- package/dist/components/generic/ListRow/ListRow.js +5 -4
- package/dist/components/generic/ListRow/ListRow.js.map +1 -1
- package/dist/components/generic/MultiSelectSearch/MultiSelectSearch.cjs +1 -1
- package/dist/components/generic/MultiSelectSearch/MultiSelectSearch.js +1 -1
- package/dist/components/generic/NotificationRow/NotificationRow.cjs +1 -1
- package/dist/components/generic/NotificationRow/NotificationRow.js +1 -1
- package/dist/components/generic/Percent/Percent.cjs +1 -1
- package/dist/components/generic/Percent/Percent.js +1 -1
- package/dist/components/generic/PhotoCropModal/PhotoCropModal.cjs +1 -1
- package/dist/components/generic/PhotoCropModal/PhotoCropModal.js +1 -1
- package/dist/components/generic/ProcessingState/ProcessingState.cjs +1 -1
- package/dist/components/generic/ProcessingState/ProcessingState.js +1 -1
- package/dist/components/generic/RadioCard/RadioCard.cjs +1 -1
- package/dist/components/generic/RadioCard/RadioCard.js +1 -1
- package/dist/components/generic/StatCard/StatCard.cjs +1 -1
- package/dist/components/generic/StatCard/StatCard.js +1 -1
- package/dist/components/generic/StepCard/StepCard.cjs +3 -2
- package/dist/components/generic/StepCard/StepCard.cjs.map +1 -1
- package/dist/components/generic/StepCard/StepCard.d.ts.map +1 -1
- package/dist/components/generic/StepCard/StepCard.js +3 -2
- package/dist/components/generic/StepCard/StepCard.js.map +1 -1
- package/dist/components/generic/StepProgress/StepProgress.cjs +11 -7
- package/dist/components/generic/StepProgress/StepProgress.cjs.map +1 -1
- package/dist/components/generic/StepProgress/StepProgress.d.ts.map +1 -1
- package/dist/components/generic/StepProgress/StepProgress.js +11 -7
- package/dist/components/generic/StepProgress/StepProgress.js.map +1 -1
- package/dist/components/generic/TablePagination/TablePagination.cjs +1 -1
- package/dist/components/generic/TablePagination/TablePagination.js +1 -1
- package/dist/components/generic/TaskInboxPopover/TaskInboxPopover.cjs +1 -1
- package/dist/components/generic/TaskInboxPopover/TaskInboxPopover.js +1 -1
- package/dist/components/generic/TaskRow/TaskRow.cjs +1 -1
- package/dist/components/generic/TaskRow/TaskRow.js +1 -1
- package/dist/components/layout/AccountSheet/AccountSheet.cjs +1 -1
- package/dist/components/layout/AccountSheet/AccountSheet.js +1 -1
- package/dist/components/layout/MobileNav/MobileNav.cjs +1 -1
- package/dist/components/layout/MobileNav/MobileNav.js +1 -1
- package/dist/components/layout/PageHeader/PageHeader.cjs +1 -1
- package/dist/components/layout/PageHeader/PageHeader.js +1 -1
- package/dist/components/primitives/Glossary/GlossaryContext.cjs +39 -0
- package/dist/components/primitives/Glossary/GlossaryContext.cjs.map +1 -0
- package/dist/components/primitives/Glossary/GlossaryContext.d.ts +49 -0
- package/dist/components/primitives/Glossary/GlossaryContext.d.ts.map +1 -0
- package/dist/components/primitives/Glossary/GlossaryContext.js +39 -0
- package/dist/components/primitives/Glossary/GlossaryContext.js.map +1 -0
- package/dist/components/primitives/Glossary/GlossaryTerm.cjs +147 -0
- package/dist/components/primitives/Glossary/GlossaryTerm.cjs.map +1 -0
- package/dist/components/primitives/Glossary/GlossaryTerm.d.ts +10 -0
- package/dist/components/primitives/Glossary/GlossaryTerm.d.ts.map +1 -0
- package/dist/components/primitives/Glossary/GlossaryTerm.js +147 -0
- package/dist/components/primitives/Glossary/GlossaryTerm.js.map +1 -0
- package/dist/components/primitives/Glossary/index.d.ts +3 -0
- package/dist/components/primitives/Glossary/index.d.ts.map +1 -0
- package/dist/components/primitives/Text/Text.cjs +112 -0
- package/dist/components/primitives/Text/Text.cjs.map +1 -0
- package/dist/components/primitives/Text/Text.d.ts +22 -0
- package/dist/components/primitives/Text/Text.d.ts.map +1 -0
- package/dist/components/primitives/Text/Text.js +112 -0
- package/dist/components/primitives/Text/Text.js.map +1 -0
- package/dist/components/primitives/Text/index.d.ts +2 -0
- package/dist/components/primitives/Text/index.d.ts.map +1 -0
- package/dist/components/primitives/index.d.ts +2 -0
- package/dist/components/primitives/index.d.ts.map +1 -1
- package/dist/components/primitives/layout.cjs.map +1 -1
- package/dist/components/primitives/layout.d.ts +2 -1
- package/dist/components/primitives/layout.d.ts.map +1 -1
- package/dist/components/primitives/layout.js.map +1 -1
- package/dist/components/primitives/muiCompat.cjs +8 -8
- package/dist/components/primitives/muiCompat.cjs.map +1 -1
- package/dist/components/primitives/muiCompat.d.ts.map +1 -1
- package/dist/components/primitives/muiCompat.js +8 -8
- package/dist/components/primitives/muiCompat.js.map +1 -1
- package/dist/components/specific/DocumentRow/DocumentRow.cjs +1 -1
- package/dist/components/specific/DocumentRow/DocumentRow.js +1 -1
- package/dist/components/specific/InvestorProfileCard/InvestorProfileCard.cjs +1 -1
- package/dist/components/specific/InvestorProfileCard/InvestorProfileCard.js +1 -1
- package/dist/components/specific/WalletList/WalletList.cjs +1 -1
- package/dist/components/specific/WalletList/WalletList.js +1 -1
- package/dist/components/specific/WalletListItem/WalletListItem.cjs +3 -2
- package/dist/components/specific/WalletListItem/WalletListItem.cjs.map +1 -1
- package/dist/components/specific/WalletListItem/WalletListItem.d.ts.map +1 -1
- package/dist/components/specific/WalletListItem/WalletListItem.js +3 -2
- package/dist/components/specific/WalletListItem/WalletListItem.js.map +1 -1
- package/dist/constants/glossary.cjs +210 -0
- package/dist/constants/glossary.cjs.map +1 -0
- package/dist/constants/glossary.d.ts +26 -0
- package/dist/constants/glossary.d.ts.map +1 -0
- package/dist/constants/glossary.js +210 -0
- package/dist/constants/glossary.js.map +1 -0
- package/dist/fairmint-ui.cjs +13 -1
- package/dist/fairmint-ui.cjs.map +1 -1
- package/dist/fairmint-ui.js +13 -1
- package/dist/fairmint-ui.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/styles.css +7 -12
- package/dist/utils/glossaryMatcher.cjs +89 -0
- package/dist/utils/glossaryMatcher.cjs.map +1 -0
- package/dist/utils/glossaryMatcher.d.ts +23 -0
- package/dist/utils/glossaryMatcher.d.ts.map +1 -0
- package/dist/utils/glossaryMatcher.js +89 -0
- package/dist/utils/glossaryMatcher.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from "react";
|
|
3
|
+
import { useIsMobile } from "../../../hooks/useIsMobile.js";
|
|
4
|
+
import { Popover } from "../Popover/Popover.js";
|
|
5
|
+
import { Tooltip } from "../Tooltip/Tooltip.js";
|
|
6
|
+
import { useGlossaryContext } from "./GlossaryContext.js";
|
|
7
|
+
import { UnstyledButton } from "../../../node_modules/@mantine/core/esm/components/UnstyledButton/UnstyledButton.js";
|
|
8
|
+
function GlossaryTerm({ term, children }) {
|
|
9
|
+
const glossary = useGlossaryContext();
|
|
10
|
+
const isMobile = useIsMobile();
|
|
11
|
+
const onTermClick = glossary?.onTermClick;
|
|
12
|
+
const learnMoreText = glossary?.learnMoreText ?? "Click to learn more";
|
|
13
|
+
const [mobileOpened, setMobileOpened] = useState(false);
|
|
14
|
+
const handleAction = useCallback(() => {
|
|
15
|
+
if (!onTermClick) return;
|
|
16
|
+
setMobileOpened(false);
|
|
17
|
+
onTermClick(term);
|
|
18
|
+
}, [onTermClick, term]);
|
|
19
|
+
const handleClick = (e) => {
|
|
20
|
+
e.stopPropagation();
|
|
21
|
+
if (isMobile) {
|
|
22
|
+
setMobileOpened((prev) => !prev);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (onTermClick) {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
handleAction();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const handleKeyDown = (e) => {
|
|
31
|
+
if (isMobile) {
|
|
32
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
e.stopPropagation();
|
|
35
|
+
setMobileOpened((prev) => !prev);
|
|
36
|
+
}
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if ((e.key === "Enter" || e.key === " ") && onTermClick) {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
e.stopPropagation();
|
|
42
|
+
handleAction();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const termStyle = {
|
|
46
|
+
display: "inline",
|
|
47
|
+
padding: 0,
|
|
48
|
+
border: 0,
|
|
49
|
+
background: "transparent",
|
|
50
|
+
color: "inherit",
|
|
51
|
+
font: "inherit",
|
|
52
|
+
textDecoration: "underline dotted",
|
|
53
|
+
textDecorationColor: "color-mix(in srgb, currentColor 55%, transparent)",
|
|
54
|
+
textDecorationThickness: "1px",
|
|
55
|
+
textUnderlineOffset: "3px",
|
|
56
|
+
cursor: onTermClick ? isMobile ? "help" : "pointer" : "help"
|
|
57
|
+
};
|
|
58
|
+
const tooltipContent = /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 6 }, children: [
|
|
59
|
+
/* @__PURE__ */ jsx("span", { children: term.explanation }),
|
|
60
|
+
onTermClick && (isMobile ? /* @__PURE__ */ jsxs(
|
|
61
|
+
"button",
|
|
62
|
+
{
|
|
63
|
+
onClick: (e) => {
|
|
64
|
+
e.stopPropagation();
|
|
65
|
+
handleAction();
|
|
66
|
+
},
|
|
67
|
+
style: {
|
|
68
|
+
background: "transparent",
|
|
69
|
+
border: 0,
|
|
70
|
+
padding: 0,
|
|
71
|
+
color: "inherit",
|
|
72
|
+
font: "inherit",
|
|
73
|
+
fontSize: "11px",
|
|
74
|
+
opacity: 0.85,
|
|
75
|
+
fontWeight: 500,
|
|
76
|
+
cursor: "pointer",
|
|
77
|
+
textAlign: "left",
|
|
78
|
+
textDecoration: "underline"
|
|
79
|
+
},
|
|
80
|
+
type: "button",
|
|
81
|
+
children: [
|
|
82
|
+
learnMoreText,
|
|
83
|
+
" →"
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
) : /* @__PURE__ */ jsx("span", { style: { fontSize: "11px", opacity: 0.85, fontWeight: 500 }, children: learnMoreText }))
|
|
87
|
+
] });
|
|
88
|
+
if (isMobile) {
|
|
89
|
+
return (
|
|
90
|
+
// The wrapper stops the completed Popover click from reaching parent cards
|
|
91
|
+
// without blocking Popover.Target's own toggle handler.
|
|
92
|
+
// biome-ignore lint/a11y/noStaticElementInteractions: propagation boundary around an interactive Popover
|
|
93
|
+
// biome-ignore lint/a11y/useKeyWithClickEvents: keyboard activation does not bubble as a parent click
|
|
94
|
+
/* @__PURE__ */ jsx("span", { onClick: (event) => event.stopPropagation(), children: /* @__PURE__ */ jsxs(
|
|
95
|
+
Popover,
|
|
96
|
+
{
|
|
97
|
+
onChange: setMobileOpened,
|
|
98
|
+
onClose: () => setMobileOpened(false),
|
|
99
|
+
opened: mobileOpened,
|
|
100
|
+
position: "top",
|
|
101
|
+
shadow: "md",
|
|
102
|
+
transitionProps: { duration: 0, exitDuration: 0 },
|
|
103
|
+
withArrow: true,
|
|
104
|
+
width: 260,
|
|
105
|
+
children: [
|
|
106
|
+
/* @__PURE__ */ jsx(Popover.Target, { children: /* @__PURE__ */ jsx(
|
|
107
|
+
UnstyledButton,
|
|
108
|
+
{
|
|
109
|
+
onClick: handleClick,
|
|
110
|
+
onKeyDown: handleKeyDown,
|
|
111
|
+
style: termStyle,
|
|
112
|
+
type: "button",
|
|
113
|
+
children
|
|
114
|
+
}
|
|
115
|
+
) }),
|
|
116
|
+
/* @__PURE__ */ jsx(Popover.Dropdown, { style: mobileOpened ? { display: "block" } : void 0, children: tooltipContent })
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
) })
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
return /* @__PURE__ */ jsx(
|
|
123
|
+
Tooltip,
|
|
124
|
+
{
|
|
125
|
+
events: { focus: true, hover: true, touch: true },
|
|
126
|
+
label: tooltipContent,
|
|
127
|
+
multiline: true,
|
|
128
|
+
styles: onTermClick ? { tooltip: { pointerEvents: "auto" } } : void 0,
|
|
129
|
+
w: 260,
|
|
130
|
+
withArrow: true,
|
|
131
|
+
children: /* @__PURE__ */ jsx(
|
|
132
|
+
UnstyledButton,
|
|
133
|
+
{
|
|
134
|
+
onClick: handleClick,
|
|
135
|
+
onKeyDown: handleKeyDown,
|
|
136
|
+
style: termStyle,
|
|
137
|
+
type: "button",
|
|
138
|
+
children
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
export {
|
|
145
|
+
GlossaryTerm
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=GlossaryTerm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlossaryTerm.js","sources":["../../../../src/components/primitives/Glossary/GlossaryTerm.tsx"],"sourcesContent":["import type { CSSProperties, KeyboardEvent, MouseEvent, ReactNode } from \"react\";\nimport { useCallback, useState } from \"react\";\nimport type { GlossaryTerm as GlossaryTermData } from \"../../../constants/glossary\";\nimport { useIsMobile } from \"../../../hooks/useIsMobile\";\nimport { UnstyledButton } from \"../layout\";\nimport { Popover } from \"../Popover/Popover\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\nimport { useGlossaryContext } from \"./GlossaryContext\";\n\nexport interface GlossaryTermProps {\n /** The glossary term data. */\n term: GlossaryTermData;\n /** The text displayed in the copy (matches source text casing). */\n children: ReactNode;\n}\n\nexport function GlossaryTerm({ term, children }: GlossaryTermProps) {\n const glossary = useGlossaryContext();\n const isMobile = useIsMobile();\n const onTermClick = glossary?.onTermClick;\n const learnMoreText = glossary?.learnMoreText ?? \"Click to learn more\";\n\n const [mobileOpened, setMobileOpened] = useState(false);\n\n const handleAction = useCallback(() => {\n if (!onTermClick) return;\n setMobileOpened(false);\n onTermClick(term);\n }, [onTermClick, term]);\n\n const handleClick = (e: MouseEvent) => {\n e.stopPropagation();\n if (isMobile) {\n setMobileOpened((prev) => !prev);\n return;\n }\n\n if (onTermClick) {\n e.preventDefault();\n handleAction();\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (isMobile) {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n setMobileOpened((prev) => !prev);\n }\n return;\n }\n\n if ((e.key === \"Enter\" || e.key === \" \") && onTermClick) {\n e.preventDefault();\n e.stopPropagation();\n handleAction();\n }\n };\n\n const termStyle: CSSProperties = {\n display: \"inline\",\n padding: 0,\n border: 0,\n background: \"transparent\",\n color: \"inherit\",\n font: \"inherit\",\n textDecoration: \"underline dotted\",\n textDecorationColor: \"color-mix(in srgb, currentColor 55%, transparent)\",\n textDecorationThickness: \"1px\",\n textUnderlineOffset: \"3px\",\n cursor: onTermClick ? (isMobile ? \"help\" : \"pointer\") : \"help\",\n };\n\n const tooltipContent = (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <span>{term.explanation}</span>\n {onTermClick &&\n (isMobile ? (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleAction();\n }}\n style={{\n background: \"transparent\",\n border: 0,\n padding: 0,\n color: \"inherit\",\n font: \"inherit\",\n fontSize: \"11px\",\n opacity: 0.85,\n fontWeight: 500,\n cursor: \"pointer\",\n textAlign: \"left\",\n textDecoration: \"underline\",\n }}\n type=\"button\"\n >\n {learnMoreText} →\n </button>\n ) : (\n <span style={{ fontSize: \"11px\", opacity: 0.85, fontWeight: 500 }}>{learnMoreText}</span>\n ))}\n </div>\n );\n\n if (isMobile) {\n return (\n // The wrapper stops the completed Popover click from reaching parent cards\n // without blocking Popover.Target's own toggle handler.\n // biome-ignore lint/a11y/noStaticElementInteractions: propagation boundary around an interactive Popover\n // biome-ignore lint/a11y/useKeyWithClickEvents: keyboard activation does not bubble as a parent click\n <span onClick={(event) => event.stopPropagation()}>\n <Popover\n onChange={setMobileOpened}\n onClose={() => setMobileOpened(false)}\n opened={mobileOpened}\n position=\"top\"\n shadow=\"md\"\n transitionProps={{ duration: 0, exitDuration: 0 }}\n withArrow\n width={260}\n >\n <Popover.Target>\n <UnstyledButton\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n style={termStyle}\n type=\"button\"\n >\n {children}\n </UnstyledButton>\n </Popover.Target>\n <Popover.Dropdown style={mobileOpened ? { display: \"block\" } : undefined}>\n {tooltipContent}\n </Popover.Dropdown>\n </Popover>\n </span>\n );\n }\n\n return (\n <Tooltip\n events={{ focus: true, hover: true, touch: true } as const}\n label={tooltipContent}\n multiline\n styles={onTermClick ? { tooltip: { pointerEvents: \"auto\" } } : undefined}\n w={260}\n withArrow\n >\n <UnstyledButton\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n style={termStyle}\n type=\"button\"\n >\n {children}\n </UnstyledButton>\n </Tooltip>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { type GlossaryContextValue, GlossaryProvider, type GlossaryProviderProps, GlossaryScope, type GlossaryScopeContextValue, type GlossaryScopeProps, type GlossaryTermData, type GlossaryTermDefinition, useGlossaryContext, useGlossaryScope, } from './GlossaryContext';
|
|
2
|
+
export { GlossaryTerm, type GlossaryTermProps } from './GlossaryTerm';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/Glossary/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,aAAa,EACb,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const React = require("react");
|
|
5
|
+
const glossaryMatcher = require("../../../utils/glossaryMatcher.cjs");
|
|
6
|
+
const GlossaryContext = require("../Glossary/GlossaryContext.cjs");
|
|
7
|
+
const GlossaryTerm = require("../Glossary/GlossaryTerm.cjs");
|
|
8
|
+
const createPolymorphicComponent = require("../../../node_modules/@mantine/core/esm/core/factory/create-polymorphic-component.cjs");
|
|
9
|
+
const Text$1 = require("../../../node_modules/@mantine/core/esm/components/Text/Text.cjs");
|
|
10
|
+
const SKIP_CHILD_ELEMENTS = /^(a|button|input|select|textarea|code|pre|svg)$/i;
|
|
11
|
+
const _Text = React.forwardRef(
|
|
12
|
+
({ children, glossary = true, ...props }, ref) => {
|
|
13
|
+
const glossaryContext = GlossaryContext.useGlossaryContext();
|
|
14
|
+
const glossaryScope = GlossaryContext.useGlossaryScope();
|
|
15
|
+
const component = "component" in props ? props.component : void 0;
|
|
16
|
+
const href = "href" in props ? props.href : void 0;
|
|
17
|
+
const to = "to" in props ? props.to : void 0;
|
|
18
|
+
const onClick = "onClick" in props ? props.onClick : void 0;
|
|
19
|
+
const role = "role" in props ? props.role : void 0;
|
|
20
|
+
const isInteractive = component === "a" || component === "button" || component !== void 0 && typeof component !== "string" || Boolean(href) || Boolean(to) || typeof onClick === "function" || role === "button";
|
|
21
|
+
const isGlossaryActive = glossary !== false && !isInteractive && Boolean(glossaryContext?.enabled) && Boolean(glossaryScope) && Boolean(glossaryContext?.terms?.length);
|
|
22
|
+
if (!isGlossaryActive || !glossaryContext || !glossaryScope) {
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Text$1.Text, { ref, ...props, children });
|
|
24
|
+
}
|
|
25
|
+
const emittedInPass = /* @__PURE__ */ new Set();
|
|
26
|
+
const transformedChildren = transformChildren(children, glossaryContext.terms, emittedInPass);
|
|
27
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Text$1.Text, { ref, ...props, children: transformedChildren });
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
_Text.displayName = "Text";
|
|
31
|
+
const Text = createPolymorphicComponent.createPolymorphicComponent(_Text);
|
|
32
|
+
function transformChildren(node, terms, emittedInPass) {
|
|
33
|
+
if (typeof node === "string") {
|
|
34
|
+
return linkifyString(node, terms, emittedInPass);
|
|
35
|
+
}
|
|
36
|
+
if (Array.isArray(node)) {
|
|
37
|
+
return transformArray(node, terms, emittedInPass);
|
|
38
|
+
}
|
|
39
|
+
if (React.isValidElement(node)) {
|
|
40
|
+
if (node.type !== React.Fragment && typeof node.type !== "string") {
|
|
41
|
+
return node;
|
|
42
|
+
}
|
|
43
|
+
if (typeof node.type === "string" && SKIP_CHILD_ELEMENTS.test(node.type)) {
|
|
44
|
+
return node;
|
|
45
|
+
}
|
|
46
|
+
if (hasChildren(node.props)) {
|
|
47
|
+
if ("onClick" in node.props || "role" in node.props && node.props.role === "button") {
|
|
48
|
+
return node;
|
|
49
|
+
}
|
|
50
|
+
return React.cloneElement(
|
|
51
|
+
node,
|
|
52
|
+
void 0,
|
|
53
|
+
transformChildren(node.props.children, terms, emittedInPass)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return node;
|
|
58
|
+
}
|
|
59
|
+
function transformArray(children, terms, emittedInPass) {
|
|
60
|
+
const result = [];
|
|
61
|
+
let textBuffer = [];
|
|
62
|
+
const flushTextBuffer = () => {
|
|
63
|
+
if (textBuffer.length === 0) return;
|
|
64
|
+
const combined = textBuffer.join("");
|
|
65
|
+
textBuffer = [];
|
|
66
|
+
if (combined.length === 0) return;
|
|
67
|
+
result.push(linkifyString(combined, terms, emittedInPass));
|
|
68
|
+
};
|
|
69
|
+
for (let i = 0; i < children.length; i++) {
|
|
70
|
+
const child = children[i];
|
|
71
|
+
if (typeof child === "string" || typeof child === "number") {
|
|
72
|
+
textBuffer.push(String(child));
|
|
73
|
+
} else {
|
|
74
|
+
flushTextBuffer();
|
|
75
|
+
result.push(transformChildren(child, terms, emittedInPass));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
flushTextBuffer();
|
|
79
|
+
return result.length === children.length ? result : result;
|
|
80
|
+
}
|
|
81
|
+
function linkifyString(text, terms, emittedInPass) {
|
|
82
|
+
const matches = glossaryMatcher.matchGlossaryTerms(text, terms, emittedInPass);
|
|
83
|
+
if (matches.length === 0) return text;
|
|
84
|
+
const parts = [];
|
|
85
|
+
let cursor = 0;
|
|
86
|
+
let keyIndex = 0;
|
|
87
|
+
for (const match of matches) {
|
|
88
|
+
if (match.start < cursor) continue;
|
|
89
|
+
emittedInPass.add(match.termId);
|
|
90
|
+
if (match.start > cursor) {
|
|
91
|
+
parts.push(text.slice(cursor, match.start));
|
|
92
|
+
}
|
|
93
|
+
const termData = terms.find((t) => t.id === match.termId);
|
|
94
|
+
if (termData) {
|
|
95
|
+
parts.push(
|
|
96
|
+
/* @__PURE__ */ jsxRuntime.jsx(GlossaryTerm.GlossaryTerm, { term: termData, children: match.text }, `glossary-${match.termId}-${keyIndex++}`)
|
|
97
|
+
);
|
|
98
|
+
} else {
|
|
99
|
+
parts.push(match.text);
|
|
100
|
+
}
|
|
101
|
+
cursor = match.end;
|
|
102
|
+
}
|
|
103
|
+
if (cursor < text.length) {
|
|
104
|
+
parts.push(text.slice(cursor));
|
|
105
|
+
}
|
|
106
|
+
return parts.length === 1 ? parts[0] : parts;
|
|
107
|
+
}
|
|
108
|
+
function hasChildren(value) {
|
|
109
|
+
return typeof value === "object" && value !== null && "children" in value;
|
|
110
|
+
}
|
|
111
|
+
exports.Text = Text;
|
|
112
|
+
//# sourceMappingURL=Text.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.cjs","sources":["../../../../src/components/primitives/Text/Text.tsx"],"sourcesContent":["import {\n createPolymorphicComponent,\n Text as MantineText,\n type TextProps as MantineTextProps,\n} from \"@mantine/core\";\nimport { cloneElement, Fragment, forwardRef, isValidElement, type ReactNode } from \"react\";\nimport type { GlossaryTerm as GlossaryTermData } from \"../../../constants/glossary\";\nimport { matchGlossaryTerms } from \"../../../utils/glossaryMatcher\";\nimport { useGlossaryContext, useGlossaryScope } from \"../Glossary/GlossaryContext\";\nimport { GlossaryTerm } from \"../Glossary/GlossaryTerm\";\n\nexport interface TextProps extends MantineTextProps {\n children?: ReactNode;\n /**\n * Whether to automatically linkify financial glossary terms in this text block.\n * Defaults to `true` when wrapped inside an active `<GlossaryScope>`.\n * Set to `false` to explicitly disable glossary matching (e.g. for dynamic data, tables, user inputs).\n * @default true\n */\n glossary?: boolean;\n}\n\nconst SKIP_CHILD_ELEMENTS = /^(a|button|input|select|textarea|code|pre|svg)$/i;\n\nconst _Text = forwardRef<HTMLParagraphElement, TextProps>(\n ({ children, glossary = true, ...props }, ref) => {\n const glossaryContext = useGlossaryContext();\n const glossaryScope = useGlossaryScope();\n\n // Do not linkify if the Text element itself is interactive (component, href, to, onClick, role)\n const component = \"component\" in props ? props.component : undefined;\n const href = \"href\" in props ? props.href : undefined;\n const to = \"to\" in props ? props.to : undefined;\n const onClick = \"onClick\" in props ? props.onClick : undefined;\n const role = \"role\" in props ? props.role : undefined;\n const isInteractive =\n component === \"a\" ||\n component === \"button\" ||\n (component !== undefined && typeof component !== \"string\") ||\n Boolean(href) ||\n Boolean(to) ||\n typeof onClick === \"function\" ||\n role === \"button\";\n\n const isGlossaryActive =\n glossary !== false &&\n !isInteractive &&\n Boolean(glossaryContext?.enabled) &&\n Boolean(glossaryScope) &&\n Boolean(glossaryContext?.terms?.length);\n\n if (!isGlossaryActive || !glossaryContext || !glossaryScope) {\n return (\n <MantineText ref={ref} {...props}>\n {children}\n </MantineText>\n );\n }\n\n const emittedInPass = new Set<string>();\n const transformedChildren = transformChildren(children, glossaryContext.terms, emittedInPass);\n\n return (\n <MantineText ref={ref} {...props}>\n {transformedChildren}\n </MantineText>\n );\n },\n);\n\n_Text.displayName = \"Text\";\n\nexport const Text = createPolymorphicComponent<\"p\", TextProps>(_Text);\n\nfunction transformChildren(\n node: ReactNode,\n terms: readonly GlossaryTermData[],\n emittedInPass: Set<string>,\n): ReactNode {\n if (typeof node === \"string\") {\n return linkifyString(node, terms, emittedInPass);\n }\n\n if (Array.isArray(node)) {\n return transformArray(node, terms, emittedInPass);\n }\n\n if (isValidElement(node)) {\n if (node.type !== Fragment && typeof node.type !== \"string\") {\n return node;\n }\n\n if (typeof node.type === \"string\" && SKIP_CHILD_ELEMENTS.test(node.type)) {\n return node;\n }\n\n if (hasChildren(node.props)) {\n // Do not descend into child elements with interactive props\n if (\"onClick\" in node.props || (\"role\" in node.props && node.props.role === \"button\")) {\n return node;\n }\n return cloneElement(\n node,\n undefined,\n transformChildren(node.props.children, terms, emittedInPass),\n );\n }\n }\n\n return node;\n}\n\n/**\n * Process an array of React children by concatenating adjacent strings/numbers\n * into a single text run before matching, preventing false positives like \"ISO\"\n * matching inside the split text \"ISO{\"lated\"}\" (which renders as \"ISOlated\").\n */\nfunction transformArray(\n children: ReactNode[],\n terms: readonly GlossaryTermData[],\n emittedInPass: Set<string>,\n): ReactNode[] {\n const result: ReactNode[] = [];\n let textBuffer: Array<string | number> = [];\n\n const flushTextBuffer = () => {\n if (textBuffer.length === 0) return;\n const combined = textBuffer.join(\"\");\n textBuffer = [];\n if (combined.length === 0) return;\n result.push(linkifyString(combined, terms, emittedInPass));\n };\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (typeof child === \"string\" || typeof child === \"number\") {\n textBuffer.push(String(child));\n } else {\n flushTextBuffer();\n result.push(transformChildren(child, terms, emittedInPass));\n }\n }\n\n flushTextBuffer();\n return result.length === children.length ? result : (result as unknown as ReactNode[]);\n}\n\nfunction linkifyString(\n text: string,\n terms: readonly GlossaryTermData[],\n emittedInPass: Set<string>,\n): ReactNode {\n const matches = matchGlossaryTerms(text, terms, emittedInPass);\n if (matches.length === 0) return text;\n\n const parts: ReactNode[] = [];\n let cursor = 0;\n let keyIndex = 0;\n\n for (const match of matches) {\n if (match.start < cursor) continue;\n\n emittedInPass.add(match.termId);\n\n if (match.start > cursor) {\n parts.push(text.slice(cursor, match.start));\n }\n\n // Resolve term data directly from the active terms dictionary (supports custom dictionaries)\n const termData = terms.find((t) => t.id === match.termId);\n if (termData) {\n parts.push(\n <GlossaryTerm key={`glossary-${match.termId}-${keyIndex++}`} term={termData}>\n {match.text}\n </GlossaryTerm>,\n );\n } else {\n parts.push(match.text);\n }\n\n cursor = match.end;\n }\n\n if (cursor < text.length) {\n parts.push(text.slice(cursor));\n }\n\n return parts.length === 1 ? parts[0] : parts;\n}\n\nfunction hasChildren(value: unknown): value is { children?: ReactNode } {\n return typeof value === \"object\" && value !== null && \"children\" in value;\n}\n"],"names":["forwardRef","useGlossaryContext","useGlossaryScope","jsx","MantineText","createPolymorphicComponent","isValidElement","Fragment","cloneElement","matchGlossaryTerms","GlossaryTerm"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TextProps as MantineTextProps } from '@mantine/core';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export interface TextProps extends MantineTextProps {
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Whether to automatically linkify financial glossary terms in this text block.
|
|
7
|
+
* Defaults to `true` when wrapped inside an active `<GlossaryScope>`.
|
|
8
|
+
* Set to `false` to explicitly disable glossary matching (e.g. for dynamic data, tables, user inputs).
|
|
9
|
+
* @default true
|
|
10
|
+
*/
|
|
11
|
+
glossary?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const Text: (<C = "p">(props: import('@mantine/core').PolymorphicComponentProps<C, TextProps>) => React.ReactElement) & Omit<import('react').FunctionComponent<(TextProps & {
|
|
14
|
+
component?: any;
|
|
15
|
+
} & Omit<Omit<any, "ref">, "component" | keyof TextProps> & {
|
|
16
|
+
ref?: any;
|
|
17
|
+
renderRoot?: (props: any) => any;
|
|
18
|
+
}) | (TextProps & {
|
|
19
|
+
component: React.ElementType;
|
|
20
|
+
renderRoot?: (props: Record<string, any>) => any;
|
|
21
|
+
})>, never> & Record<string, never>;
|
|
22
|
+
//# sourceMappingURL=Text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/Text/Text.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,IAAI,gBAAgB,EACnC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM3F,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IACjD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoDD,eAAO,MAAM,IAAI;;;;;;;;mCAAoD,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, isValidElement, Fragment, cloneElement } from "react";
|
|
3
|
+
import { matchGlossaryTerms } from "../../../utils/glossaryMatcher.js";
|
|
4
|
+
import { useGlossaryContext, useGlossaryScope } from "../Glossary/GlossaryContext.js";
|
|
5
|
+
import { GlossaryTerm } from "../Glossary/GlossaryTerm.js";
|
|
6
|
+
import { createPolymorphicComponent } from "../../../node_modules/@mantine/core/esm/core/factory/create-polymorphic-component.js";
|
|
7
|
+
import { Text as Text$1 } from "../../../node_modules/@mantine/core/esm/components/Text/Text.js";
|
|
8
|
+
const SKIP_CHILD_ELEMENTS = /^(a|button|input|select|textarea|code|pre|svg)$/i;
|
|
9
|
+
const _Text = forwardRef(
|
|
10
|
+
({ children, glossary = true, ...props }, ref) => {
|
|
11
|
+
const glossaryContext = useGlossaryContext();
|
|
12
|
+
const glossaryScope = useGlossaryScope();
|
|
13
|
+
const component = "component" in props ? props.component : void 0;
|
|
14
|
+
const href = "href" in props ? props.href : void 0;
|
|
15
|
+
const to = "to" in props ? props.to : void 0;
|
|
16
|
+
const onClick = "onClick" in props ? props.onClick : void 0;
|
|
17
|
+
const role = "role" in props ? props.role : void 0;
|
|
18
|
+
const isInteractive = component === "a" || component === "button" || component !== void 0 && typeof component !== "string" || Boolean(href) || Boolean(to) || typeof onClick === "function" || role === "button";
|
|
19
|
+
const isGlossaryActive = glossary !== false && !isInteractive && Boolean(glossaryContext?.enabled) && Boolean(glossaryScope) && Boolean(glossaryContext?.terms?.length);
|
|
20
|
+
if (!isGlossaryActive || !glossaryContext || !glossaryScope) {
|
|
21
|
+
return /* @__PURE__ */ jsx(Text$1, { ref, ...props, children });
|
|
22
|
+
}
|
|
23
|
+
const emittedInPass = /* @__PURE__ */ new Set();
|
|
24
|
+
const transformedChildren = transformChildren(children, glossaryContext.terms, emittedInPass);
|
|
25
|
+
return /* @__PURE__ */ jsx(Text$1, { ref, ...props, children: transformedChildren });
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
_Text.displayName = "Text";
|
|
29
|
+
const Text = createPolymorphicComponent(_Text);
|
|
30
|
+
function transformChildren(node, terms, emittedInPass) {
|
|
31
|
+
if (typeof node === "string") {
|
|
32
|
+
return linkifyString(node, terms, emittedInPass);
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(node)) {
|
|
35
|
+
return transformArray(node, terms, emittedInPass);
|
|
36
|
+
}
|
|
37
|
+
if (isValidElement(node)) {
|
|
38
|
+
if (node.type !== Fragment && typeof node.type !== "string") {
|
|
39
|
+
return node;
|
|
40
|
+
}
|
|
41
|
+
if (typeof node.type === "string" && SKIP_CHILD_ELEMENTS.test(node.type)) {
|
|
42
|
+
return node;
|
|
43
|
+
}
|
|
44
|
+
if (hasChildren(node.props)) {
|
|
45
|
+
if ("onClick" in node.props || "role" in node.props && node.props.role === "button") {
|
|
46
|
+
return node;
|
|
47
|
+
}
|
|
48
|
+
return cloneElement(
|
|
49
|
+
node,
|
|
50
|
+
void 0,
|
|
51
|
+
transformChildren(node.props.children, terms, emittedInPass)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return node;
|
|
56
|
+
}
|
|
57
|
+
function transformArray(children, terms, emittedInPass) {
|
|
58
|
+
const result = [];
|
|
59
|
+
let textBuffer = [];
|
|
60
|
+
const flushTextBuffer = () => {
|
|
61
|
+
if (textBuffer.length === 0) return;
|
|
62
|
+
const combined = textBuffer.join("");
|
|
63
|
+
textBuffer = [];
|
|
64
|
+
if (combined.length === 0) return;
|
|
65
|
+
result.push(linkifyString(combined, terms, emittedInPass));
|
|
66
|
+
};
|
|
67
|
+
for (let i = 0; i < children.length; i++) {
|
|
68
|
+
const child = children[i];
|
|
69
|
+
if (typeof child === "string" || typeof child === "number") {
|
|
70
|
+
textBuffer.push(String(child));
|
|
71
|
+
} else {
|
|
72
|
+
flushTextBuffer();
|
|
73
|
+
result.push(transformChildren(child, terms, emittedInPass));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
flushTextBuffer();
|
|
77
|
+
return result.length === children.length ? result : result;
|
|
78
|
+
}
|
|
79
|
+
function linkifyString(text, terms, emittedInPass) {
|
|
80
|
+
const matches = matchGlossaryTerms(text, terms, emittedInPass);
|
|
81
|
+
if (matches.length === 0) return text;
|
|
82
|
+
const parts = [];
|
|
83
|
+
let cursor = 0;
|
|
84
|
+
let keyIndex = 0;
|
|
85
|
+
for (const match of matches) {
|
|
86
|
+
if (match.start < cursor) continue;
|
|
87
|
+
emittedInPass.add(match.termId);
|
|
88
|
+
if (match.start > cursor) {
|
|
89
|
+
parts.push(text.slice(cursor, match.start));
|
|
90
|
+
}
|
|
91
|
+
const termData = terms.find((t) => t.id === match.termId);
|
|
92
|
+
if (termData) {
|
|
93
|
+
parts.push(
|
|
94
|
+
/* @__PURE__ */ jsx(GlossaryTerm, { term: termData, children: match.text }, `glossary-${match.termId}-${keyIndex++}`)
|
|
95
|
+
);
|
|
96
|
+
} else {
|
|
97
|
+
parts.push(match.text);
|
|
98
|
+
}
|
|
99
|
+
cursor = match.end;
|
|
100
|
+
}
|
|
101
|
+
if (cursor < text.length) {
|
|
102
|
+
parts.push(text.slice(cursor));
|
|
103
|
+
}
|
|
104
|
+
return parts.length === 1 ? parts[0] : parts;
|
|
105
|
+
}
|
|
106
|
+
function hasChildren(value) {
|
|
107
|
+
return typeof value === "object" && value !== null && "children" in value;
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
Text
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=Text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.js","sources":["../../../../src/components/primitives/Text/Text.tsx"],"sourcesContent":["import {\n createPolymorphicComponent,\n Text as MantineText,\n type TextProps as MantineTextProps,\n} from \"@mantine/core\";\nimport { cloneElement, Fragment, forwardRef, isValidElement, type ReactNode } from \"react\";\nimport type { GlossaryTerm as GlossaryTermData } from \"../../../constants/glossary\";\nimport { matchGlossaryTerms } from \"../../../utils/glossaryMatcher\";\nimport { useGlossaryContext, useGlossaryScope } from \"../Glossary/GlossaryContext\";\nimport { GlossaryTerm } from \"../Glossary/GlossaryTerm\";\n\nexport interface TextProps extends MantineTextProps {\n children?: ReactNode;\n /**\n * Whether to automatically linkify financial glossary terms in this text block.\n * Defaults to `true` when wrapped inside an active `<GlossaryScope>`.\n * Set to `false` to explicitly disable glossary matching (e.g. for dynamic data, tables, user inputs).\n * @default true\n */\n glossary?: boolean;\n}\n\nconst SKIP_CHILD_ELEMENTS = /^(a|button|input|select|textarea|code|pre|svg)$/i;\n\nconst _Text = forwardRef<HTMLParagraphElement, TextProps>(\n ({ children, glossary = true, ...props }, ref) => {\n const glossaryContext = useGlossaryContext();\n const glossaryScope = useGlossaryScope();\n\n // Do not linkify if the Text element itself is interactive (component, href, to, onClick, role)\n const component = \"component\" in props ? props.component : undefined;\n const href = \"href\" in props ? props.href : undefined;\n const to = \"to\" in props ? props.to : undefined;\n const onClick = \"onClick\" in props ? props.onClick : undefined;\n const role = \"role\" in props ? props.role : undefined;\n const isInteractive =\n component === \"a\" ||\n component === \"button\" ||\n (component !== undefined && typeof component !== \"string\") ||\n Boolean(href) ||\n Boolean(to) ||\n typeof onClick === \"function\" ||\n role === \"button\";\n\n const isGlossaryActive =\n glossary !== false &&\n !isInteractive &&\n Boolean(glossaryContext?.enabled) &&\n Boolean(glossaryScope) &&\n Boolean(glossaryContext?.terms?.length);\n\n if (!isGlossaryActive || !glossaryContext || !glossaryScope) {\n return (\n <MantineText ref={ref} {...props}>\n {children}\n </MantineText>\n );\n }\n\n const emittedInPass = new Set<string>();\n const transformedChildren = transformChildren(children, glossaryContext.terms, emittedInPass);\n\n return (\n <MantineText ref={ref} {...props}>\n {transformedChildren}\n </MantineText>\n );\n },\n);\n\n_Text.displayName = \"Text\";\n\nexport const Text = createPolymorphicComponent<\"p\", TextProps>(_Text);\n\nfunction transformChildren(\n node: ReactNode,\n terms: readonly GlossaryTermData[],\n emittedInPass: Set<string>,\n): ReactNode {\n if (typeof node === \"string\") {\n return linkifyString(node, terms, emittedInPass);\n }\n\n if (Array.isArray(node)) {\n return transformArray(node, terms, emittedInPass);\n }\n\n if (isValidElement(node)) {\n if (node.type !== Fragment && typeof node.type !== \"string\") {\n return node;\n }\n\n if (typeof node.type === \"string\" && SKIP_CHILD_ELEMENTS.test(node.type)) {\n return node;\n }\n\n if (hasChildren(node.props)) {\n // Do not descend into child elements with interactive props\n if (\"onClick\" in node.props || (\"role\" in node.props && node.props.role === \"button\")) {\n return node;\n }\n return cloneElement(\n node,\n undefined,\n transformChildren(node.props.children, terms, emittedInPass),\n );\n }\n }\n\n return node;\n}\n\n/**\n * Process an array of React children by concatenating adjacent strings/numbers\n * into a single text run before matching, preventing false positives like \"ISO\"\n * matching inside the split text \"ISO{\"lated\"}\" (which renders as \"ISOlated\").\n */\nfunction transformArray(\n children: ReactNode[],\n terms: readonly GlossaryTermData[],\n emittedInPass: Set<string>,\n): ReactNode[] {\n const result: ReactNode[] = [];\n let textBuffer: Array<string | number> = [];\n\n const flushTextBuffer = () => {\n if (textBuffer.length === 0) return;\n const combined = textBuffer.join(\"\");\n textBuffer = [];\n if (combined.length === 0) return;\n result.push(linkifyString(combined, terms, emittedInPass));\n };\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (typeof child === \"string\" || typeof child === \"number\") {\n textBuffer.push(String(child));\n } else {\n flushTextBuffer();\n result.push(transformChildren(child, terms, emittedInPass));\n }\n }\n\n flushTextBuffer();\n return result.length === children.length ? result : (result as unknown as ReactNode[]);\n}\n\nfunction linkifyString(\n text: string,\n terms: readonly GlossaryTermData[],\n emittedInPass: Set<string>,\n): ReactNode {\n const matches = matchGlossaryTerms(text, terms, emittedInPass);\n if (matches.length === 0) return text;\n\n const parts: ReactNode[] = [];\n let cursor = 0;\n let keyIndex = 0;\n\n for (const match of matches) {\n if (match.start < cursor) continue;\n\n emittedInPass.add(match.termId);\n\n if (match.start > cursor) {\n parts.push(text.slice(cursor, match.start));\n }\n\n // Resolve term data directly from the active terms dictionary (supports custom dictionaries)\n const termData = terms.find((t) => t.id === match.termId);\n if (termData) {\n parts.push(\n <GlossaryTerm key={`glossary-${match.termId}-${keyIndex++}`} term={termData}>\n {match.text}\n </GlossaryTerm>,\n );\n } else {\n parts.push(match.text);\n }\n\n cursor = match.end;\n }\n\n if (cursor < text.length) {\n parts.push(text.slice(cursor));\n }\n\n return parts.length === 1 ? parts[0] : parts;\n}\n\nfunction hasChildren(value: unknown): value is { children?: ReactNode } {\n return typeof value === \"object\" && value !== null && \"children\" in value;\n}\n"],"names":["MantineText"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/Text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -6,6 +6,7 @@ export { Button, type ButtonProps } from './Button/Button';
|
|
|
6
6
|
export { Card } from './Card/Card';
|
|
7
7
|
export { Checkbox } from './Checkbox/Checkbox';
|
|
8
8
|
export { Drawer } from './Drawer/Drawer';
|
|
9
|
+
export { type GlossaryContextValue, GlossaryProvider, type GlossaryProviderProps, GlossaryScope, type GlossaryScopeContextValue, type GlossaryScopeProps, GlossaryTerm, type GlossaryTermProps, useGlossaryContext, useGlossaryScope, } from './Glossary';
|
|
9
10
|
export { Loader, type LoaderProps } from './Loader/Loader';
|
|
10
11
|
export { Menu } from './Menu/Menu';
|
|
11
12
|
export { Modal } from './Modal/Modal';
|
|
@@ -20,6 +21,7 @@ export { Slider, type SliderProps } from './Slider';
|
|
|
20
21
|
export { Switch } from './Switch/Switch';
|
|
21
22
|
export { Table } from './Table/Table';
|
|
22
23
|
export { Tabs } from './Tabs/Tabs';
|
|
24
|
+
export { Text, type TextProps } from './Text/Text';
|
|
23
25
|
export { TextInput } from './TextInput/TextInput';
|
|
24
26
|
export { Tooltip } from './Tooltip/Tooltip';
|
|
25
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EACL,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,aAAa,EACb,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,YAAY,EACZ,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.cjs","sources":["../../../src/components/primitives/layout.tsx"],"sourcesContent":["export {\n Anchor,\n AppShell,\n type AppShellProps,\n Burger,\n Center,\n Flex,\n Group,\n type GroupProps,\n NavLink,\n Notification,\n NumberInput,\n type NumberInputProps,\n Pagination,\n PinInput,\n ScrollArea,\n SegmentedControl,\n SimpleGrid,\n Space,\n Stepper,\n Text,\n type TextProps,\n ThemeIcon,\n type ThemeIconProps,\n Title,\n type TitleProps,\n UnstyledButton,\n useComputedColorScheme,\n useMantineTheme,\n} from \"@mantine/core\";\n\nimport {\n Box as MantineBox,\n Collapse as MantineCollapse,\n Container as MantineContainer,\n Divider as MantineDivider,\n Flex as MantineFlex,\n Grid as MantineGrid,\n List as MantineList,\n Paper as MantinePaper,\n Stack as MantineStack,\n useMantineTheme as useFairmintMantineTheme,\n} from \"@mantine/core\";\nimport { useMediaQuery as useMantineMediaQuery } from \"@mantine/hooks\";\nimport type { ElementType, ReactNode } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport { theme } from \"../../theme\";\nimport { type Sx, type SxObject, useSxStyle } from \"./sx\";\n\ntype LooseProps = Record<string, unknown> & {\n children?: ReactNode;\n className?: string;\n style?: SxObject;\n sx?: Sx;\n};\n\nconst GridContainerContext = createContext(false);\n\nexport type BoxProps = LooseProps;\nexport type ContainerProps = LooseProps & {\n disableGutters?: boolean;\n maxWidth?: boolean | string | number;\n size?: string | number;\n};\nexport type StackProps = LooseProps & {\n alignItems?: string;\n direction?: \"column\" | \"row\";\n flexWrap?: string;\n justifyContent?: string;\n spacing?: string | number;\n useFlexGap?: boolean;\n};\n\nconst withCompatClassName = (...classNames: Array<string | undefined>) =>\n classNames.filter(Boolean).join(\" \");\n\nexport const Box = ({ children, className, sx, style, ...props }: BoxProps) => {\n const sxStyle = useSxStyle(sx);\n\n if (sx === undefined) {\n return (\n <MantineBox className={className} style={style as never} {...props}>\n {children}\n </MantineBox>\n );\n }\n\n return (\n <MantineBox\n className={withCompatClassName(\"MuiBox-root\", \"fairmint-box-root\", className)}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineBox>\n );\n};\n\nconst compatContainerSizes: Record<string, number> = {\n lg: 1200,\n md: 900,\n sm: 600,\n xl: 1536,\n xs: 444,\n};\n\nconst resolveContainerSize = (size?: boolean | string | number) => {\n if (typeof size === \"boolean\") return undefined;\n if (typeof size === \"string\") return compatContainerSizes[size] ?? size;\n return size;\n};\n\nconst resolveGridGap = (spacing: unknown) => {\n if (typeof spacing === \"number\") return `${spacing * 8}px`;\n return spacing as string | undefined;\n};\n\nconst resolveStackGap = (spacing: unknown) => {\n if (typeof spacing === \"number\") return `${spacing * 8}px`;\n return spacing as string | undefined;\n};\n\nexport const resolveGridSpanValue = (span: unknown) => {\n if (span === true) return \"auto\";\n if (span === false) return undefined;\n return typeof span === \"number\" ? span : span;\n};\n\nconst resolveGridSpan = ({\n lg,\n md,\n sm,\n xl,\n xs,\n}: Pick<LooseProps, \"lg\" | \"md\" | \"sm\" | \"xl\" | \"xs\">) => {\n const responsiveSpan = {\n ...(xs !== undefined ? { base: resolveGridSpanValue(xs) } : {}),\n ...(sm !== undefined ? { sm: resolveGridSpanValue(sm) } : {}),\n ...(md !== undefined ? { md: resolveGridSpanValue(md) } : {}),\n ...(lg !== undefined ? { lg: resolveGridSpanValue(lg) } : {}),\n ...(xl !== undefined ? { xl: resolveGridSpanValue(xl) } : {}),\n };\n\n const entries = Object.entries(responsiveSpan).filter(([, value]) => value !== undefined);\n\n if (!entries.length) return undefined;\n if (entries.length === 1 && entries[0]?.[0] === \"base\") return entries[0][1];\n\n return responsiveSpan;\n};\n\nconst responsiveKeys = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const;\n\nconst isResponsiveValue = (value: unknown): value is Record<string, unknown> =>\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n responsiveKeys.some((key) => key in value);\n\nconst useResponsiveFlexDirection = (value: unknown) => {\n const mantineTheme = useFairmintMantineTheme();\n const breakpointMatches = {\n lg: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.lg})`),\n md: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.md})`),\n sm: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.sm})`),\n xl: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.xl})`),\n xs: true,\n };\n\n if (!isResponsiveValue(value)) {\n return value;\n }\n\n for (const key of [...responsiveKeys].reverse()) {\n if (value[key] !== undefined && breakpointMatches[key]) return value[key];\n }\n\n return value.base;\n};\n\nexport const Container = ({\n children,\n disableGutters,\n maxWidth,\n size,\n sx,\n style,\n ...props\n}: ContainerProps) => {\n const sxStyle = useSxStyle(sx);\n const usesCompatProps =\n disableGutters !== undefined || maxWidth !== undefined || sx !== undefined;\n\n if (!usesCompatProps) {\n return (\n <MantineContainer size={size as never} style={style as never} {...props}>\n {children}\n </MantineContainer>\n );\n }\n\n return (\n <MantineContainer\n fluid={maxWidth === false}\n px={disableGutters ? 0 : undefined}\n size={resolveContainerSize(size ?? maxWidth)}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineContainer>\n );\n};\n\nexport const Collapse = ({\n children,\n className,\n in: opened,\n opened: mantineOpened,\n sx,\n style,\n unmountOnExit,\n ...props\n}: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n const usesCompatProps = mantineOpened !== undefined || sx !== undefined;\n const isOpened = Boolean(mantineOpened ?? opened);\n const keepMounted = unmountOnExit === undefined ? undefined : !unmountOnExit;\n\n if (!usesCompatProps) {\n return (\n <MantineCollapse\n className={className}\n in={opened as boolean}\n keepMounted={keepMounted}\n style={style as never}\n {...props}\n >\n {children}\n </MantineCollapse>\n );\n }\n\n return (\n <MantineCollapse\n className={withCompatClassName(\n \"MuiCollapse-root\",\n \"fairmint-collapse-root\",\n isOpened ? undefined : \"MuiCollapse-hidden\",\n isOpened ? undefined : \"fairmint-collapse-hidden\",\n className,\n )}\n in={isOpened}\n keepMounted={keepMounted}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineCollapse>\n );\n};\n\nexport const Divider = ({ sx, style, ...props }: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n\n return (\n <MantineDivider\n style={(sx === undefined ? style : { ...sxStyle, ...style }) as never}\n {...props}\n />\n );\n};\n\nconst GridRoot = ({\n children,\n container,\n item,\n lg,\n md,\n order,\n sm,\n spacing,\n sx,\n style,\n xl,\n xs,\n ...props\n}: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n const isInsideGridContainer = useContext(GridContainerContext);\n const { alignItems, direction, display, flexDirection, justifyContent, ...gridProps } = props;\n const resolvedFlexDirection = useResponsiveFlexDirection(flexDirection ?? direction);\n const usesCompatProps =\n container !== undefined ||\n item !== undefined ||\n lg !== undefined ||\n md !== undefined ||\n sm !== undefined ||\n spacing !== undefined ||\n sx !== undefined ||\n xl !== undefined ||\n xs !== undefined ||\n alignItems !== undefined ||\n direction !== undefined ||\n display !== undefined ||\n flexDirection !== undefined ||\n justifyContent !== undefined;\n\n if (!usesCompatProps) {\n return (\n <MantineGrid style={style as never} {...gridProps}>\n {children}\n </MantineGrid>\n );\n }\n\n if (item) {\n const itemSpan = resolveGridSpan({ lg, md, sm, xl, xs });\n const itemStyle = {\n boxSizing: \"border-box\",\n minWidth: 0,\n ...sxStyle,\n ...style,\n } as never;\n const containerStyle = {\n alignItems,\n display,\n flexDirection: resolvedFlexDirection,\n justifyContent,\n width: container ? \"100%\" : undefined,\n } as never;\n const nestedGrid = container ? (\n <GridContainerContext.Provider value>\n <MantineGrid gutter={resolveGridGap(spacing) as never} style={containerStyle}>\n {children}\n </MantineGrid>\n </GridContainerContext.Provider>\n ) : (\n children\n );\n const shouldRenderColumn =\n isInsideGridContainer || itemSpan !== undefined || order !== undefined;\n\n if (!shouldRenderColumn) {\n return (\n <MantineBox style={itemStyle} {...gridProps}>\n {nestedGrid}\n </MantineBox>\n );\n }\n\n if (!isInsideGridContainer) {\n return (\n <MantineGrid gutter={resolveGridGap(spacing) as never}>\n <MantineGrid.Col order={order as never} span={itemSpan as never} style={itemStyle}>\n {nestedGrid}\n </MantineGrid.Col>\n </MantineGrid>\n );\n }\n\n return (\n <MantineGrid.Col\n order={order as never}\n span={itemSpan as never}\n style={itemStyle}\n {...gridProps}\n >\n {nestedGrid}\n </MantineGrid.Col>\n );\n }\n\n return (\n <GridContainerContext.Provider value={Boolean(container)}>\n <MantineGrid\n gutter={resolveGridGap(spacing) as never}\n style={\n {\n alignItems,\n display,\n flexDirection: resolvedFlexDirection,\n justifyContent,\n width: container ? \"100%\" : undefined,\n ...sxStyle,\n ...style,\n } as never\n }\n {...gridProps}\n >\n {children}\n </MantineGrid>\n </GridContainerContext.Provider>\n );\n};\n\nexport const Grid = Object.assign(GridRoot, { Col: MantineGrid.Col });\n\nconst ListRoot = ({\n children,\n component,\n dense,\n disablePadding,\n sx,\n style,\n ...props\n}: LooseProps & { component?: ElementType }) => {\n const sxStyle = useSxStyle(sx);\n const Component = component || MantineList;\n return (\n <Component\n style={\n {\n \"--list-spacing\": dense ? \"var(--mantine-spacing-xs)\" : undefined,\n ...sxStyle,\n padding: disablePadding ? 0 : undefined,\n ...style,\n } as never\n }\n {...props}\n >\n {children}\n </Component>\n );\n};\n\nexport const List = Object.assign(ListRoot, { Item: MantineList.Item });\n\nexport const Paper = ({ children, className, elevation, sx, style, ...props }: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n\n return (\n <MantinePaper\n className={\n elevation !== undefined || sx !== undefined\n ? withCompatClassName(\"MuiPaper-root\", \"fairmint-paper-root\", className)\n : className\n }\n shadow={elevation ? \"sm\" : undefined}\n style={(sx === undefined ? style : { ...sxStyle, ...style }) as never}\n {...props}\n >\n {children}\n </MantinePaper>\n );\n};\n\nexport const Stack = ({\n alignItems,\n children,\n direction,\n flexWrap,\n justifyContent,\n spacing,\n sx,\n style,\n useFlexGap: _useFlexGap,\n ...props\n}: StackProps) => {\n const usesCompatProps =\n alignItems !== undefined ||\n direction !== undefined ||\n flexWrap !== undefined ||\n justifyContent !== undefined ||\n spacing !== undefined ||\n sx !== undefined ||\n _useFlexGap !== undefined;\n\n const sxStyle = useSxStyle(sx);\n\n if (!usesCompatProps) {\n return (\n <MantineStack style={style as never} {...props}>\n {children}\n </MantineStack>\n );\n }\n\n return (\n <MantineFlex\n direction={direction ?? \"column\"}\n gap={resolveStackGap(spacing)}\n align={alignItems}\n justify={justifyContent}\n wrap={flexWrap as never}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineFlex>\n );\n};\n\nexport {\n useClickOutside,\n useClipboard,\n useDebouncedValue,\n useDisclosure,\n useHotkeys,\n useId,\n useIntersection,\n useScrollIntoView,\n useViewportSize,\n} from \"@mantine/hooks\";\n\nconst createMediaQueryTheme = (breakpoints?: Record<string, string | undefined>) => ({\n breakpoints: {\n down: (key: string) => `(max-width: ${breakpoints?.[key] ?? key})`,\n up: (key: string) => `(min-width: ${breakpoints?.[key] ?? key})`,\n },\n});\n\ntype MediaQueryTheme = ReturnType<typeof createMediaQueryTheme>;\nconst mediaQueryTheme = createMediaQueryTheme(theme.breakpoints);\n\ntype MantineMediaQueryOptions = Parameters<typeof useMantineMediaQuery>[2];\ntype MediaQueryOptions = MantineMediaQueryOptions & {\n defaultMatches?: boolean;\n noSsr?: boolean;\n};\n\nexport const useMediaQuery = (\n query: string | ((theme: MediaQueryTheme) => string),\n initialValueOrOptions?: boolean | MediaQueryOptions,\n options?: MantineMediaQueryOptions,\n) => {\n const normalizedQuery = typeof query === \"function\" ? query(mediaQueryTheme) : query;\n let initialValue = typeof initialValueOrOptions === \"boolean\" ? initialValueOrOptions : undefined;\n let mantineOptions = options;\n\n if (typeof initialValueOrOptions === \"object\") {\n const { defaultMatches, noSsr, ...optionOverrides } = initialValueOrOptions;\n initialValue = defaultMatches;\n mantineOptions = {\n ...optionOverrides,\n getInitialValueInEffect:\n noSsr === true ? false : (optionOverrides.getInitialValueInEffect ?? true),\n };\n }\n\n return useMantineMediaQuery(normalizedQuery, initialValue, mantineOptions);\n};\n"],"names":["createContext","sx","useSxStyle","MantineBox","jsx","useFairmintMantineTheme","useMantineMediaQuery","MantineContainer","MantineCollapse","MantineDivider","useContext","MantineGrid","MantineList","MantinePaper","MantineStack","MantineFlex","theme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout.cjs","sources":["../../../src/components/primitives/layout.tsx"],"sourcesContent":["export {\n Anchor,\n AppShell,\n type AppShellProps,\n Burger,\n Center,\n Flex,\n Group,\n type GroupProps,\n NavLink,\n Notification,\n NumberInput,\n type NumberInputProps,\n Pagination,\n PinInput,\n ScrollArea,\n SegmentedControl,\n SimpleGrid,\n Space,\n Stepper,\n ThemeIcon,\n type ThemeIconProps,\n Title,\n type TitleProps,\n UnstyledButton,\n useComputedColorScheme,\n useMantineTheme,\n} from \"@mantine/core\";\n\nexport { Text, type TextProps } from \"./Text/Text\";\n\nimport {\n Box as MantineBox,\n Collapse as MantineCollapse,\n Container as MantineContainer,\n Divider as MantineDivider,\n Flex as MantineFlex,\n Grid as MantineGrid,\n List as MantineList,\n Paper as MantinePaper,\n Stack as MantineStack,\n useMantineTheme as useFairmintMantineTheme,\n} from \"@mantine/core\";\nimport { useMediaQuery as useMantineMediaQuery } from \"@mantine/hooks\";\nimport type { ElementType, ReactNode } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport { theme } from \"../../theme\";\nimport { type Sx, type SxObject, useSxStyle } from \"./sx\";\n\ntype LooseProps = Record<string, unknown> & {\n children?: ReactNode;\n className?: string;\n style?: SxObject;\n sx?: Sx;\n};\n\nconst GridContainerContext = createContext(false);\n\nexport type BoxProps = LooseProps;\nexport type ContainerProps = LooseProps & {\n disableGutters?: boolean;\n maxWidth?: boolean | string | number;\n size?: string | number;\n};\nexport type StackProps = LooseProps & {\n alignItems?: string;\n direction?: \"column\" | \"row\";\n flexWrap?: string;\n justifyContent?: string;\n spacing?: string | number;\n useFlexGap?: boolean;\n};\n\nconst withCompatClassName = (...classNames: Array<string | undefined>) =>\n classNames.filter(Boolean).join(\" \");\n\nexport const Box = ({ children, className, sx, style, ...props }: BoxProps) => {\n const sxStyle = useSxStyle(sx);\n\n if (sx === undefined) {\n return (\n <MantineBox className={className} style={style as never} {...props}>\n {children}\n </MantineBox>\n );\n }\n\n return (\n <MantineBox\n className={withCompatClassName(\"MuiBox-root\", \"fairmint-box-root\", className)}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineBox>\n );\n};\n\nconst compatContainerSizes: Record<string, number> = {\n lg: 1200,\n md: 900,\n sm: 600,\n xl: 1536,\n xs: 444,\n};\n\nconst resolveContainerSize = (size?: boolean | string | number) => {\n if (typeof size === \"boolean\") return undefined;\n if (typeof size === \"string\") return compatContainerSizes[size] ?? size;\n return size;\n};\n\nconst resolveGridGap = (spacing: unknown) => {\n if (typeof spacing === \"number\") return `${spacing * 8}px`;\n return spacing as string | undefined;\n};\n\nconst resolveStackGap = (spacing: unknown) => {\n if (typeof spacing === \"number\") return `${spacing * 8}px`;\n return spacing as string | undefined;\n};\n\nexport const resolveGridSpanValue = (span: unknown) => {\n if (span === true) return \"auto\";\n if (span === false) return undefined;\n return typeof span === \"number\" ? span : span;\n};\n\nconst resolveGridSpan = ({\n lg,\n md,\n sm,\n xl,\n xs,\n}: Pick<LooseProps, \"lg\" | \"md\" | \"sm\" | \"xl\" | \"xs\">) => {\n const responsiveSpan = {\n ...(xs !== undefined ? { base: resolveGridSpanValue(xs) } : {}),\n ...(sm !== undefined ? { sm: resolveGridSpanValue(sm) } : {}),\n ...(md !== undefined ? { md: resolveGridSpanValue(md) } : {}),\n ...(lg !== undefined ? { lg: resolveGridSpanValue(lg) } : {}),\n ...(xl !== undefined ? { xl: resolveGridSpanValue(xl) } : {}),\n };\n\n const entries = Object.entries(responsiveSpan).filter(([, value]) => value !== undefined);\n\n if (!entries.length) return undefined;\n if (entries.length === 1 && entries[0]?.[0] === \"base\") return entries[0][1];\n\n return responsiveSpan;\n};\n\nconst responsiveKeys = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const;\n\nconst isResponsiveValue = (value: unknown): value is Record<string, unknown> =>\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n responsiveKeys.some((key) => key in value);\n\nconst useResponsiveFlexDirection = (value: unknown) => {\n const mantineTheme = useFairmintMantineTheme();\n const breakpointMatches = {\n lg: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.lg})`),\n md: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.md})`),\n sm: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.sm})`),\n xl: useMantineMediaQuery(`(min-width: ${mantineTheme.breakpoints.xl})`),\n xs: true,\n };\n\n if (!isResponsiveValue(value)) {\n return value;\n }\n\n for (const key of [...responsiveKeys].reverse()) {\n if (value[key] !== undefined && breakpointMatches[key]) return value[key];\n }\n\n return value.base;\n};\n\nexport const Container = ({\n children,\n disableGutters,\n maxWidth,\n size,\n sx,\n style,\n ...props\n}: ContainerProps) => {\n const sxStyle = useSxStyle(sx);\n const usesCompatProps =\n disableGutters !== undefined || maxWidth !== undefined || sx !== undefined;\n\n if (!usesCompatProps) {\n return (\n <MantineContainer size={size as never} style={style as never} {...props}>\n {children}\n </MantineContainer>\n );\n }\n\n return (\n <MantineContainer\n fluid={maxWidth === false}\n px={disableGutters ? 0 : undefined}\n size={resolveContainerSize(size ?? maxWidth)}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineContainer>\n );\n};\n\nexport const Collapse = ({\n children,\n className,\n in: opened,\n opened: mantineOpened,\n sx,\n style,\n unmountOnExit,\n ...props\n}: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n const usesCompatProps = mantineOpened !== undefined || sx !== undefined;\n const isOpened = Boolean(mantineOpened ?? opened);\n const keepMounted = unmountOnExit === undefined ? undefined : !unmountOnExit;\n\n if (!usesCompatProps) {\n return (\n <MantineCollapse\n className={className}\n in={opened as boolean}\n keepMounted={keepMounted}\n style={style as never}\n {...props}\n >\n {children}\n </MantineCollapse>\n );\n }\n\n return (\n <MantineCollapse\n className={withCompatClassName(\n \"MuiCollapse-root\",\n \"fairmint-collapse-root\",\n isOpened ? undefined : \"MuiCollapse-hidden\",\n isOpened ? undefined : \"fairmint-collapse-hidden\",\n className,\n )}\n in={isOpened}\n keepMounted={keepMounted}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineCollapse>\n );\n};\n\nexport const Divider = ({ sx, style, ...props }: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n\n return (\n <MantineDivider\n style={(sx === undefined ? style : { ...sxStyle, ...style }) as never}\n {...props}\n />\n );\n};\n\nconst GridRoot = ({\n children,\n container,\n item,\n lg,\n md,\n order,\n sm,\n spacing,\n sx,\n style,\n xl,\n xs,\n ...props\n}: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n const isInsideGridContainer = useContext(GridContainerContext);\n const { alignItems, direction, display, flexDirection, justifyContent, ...gridProps } = props;\n const resolvedFlexDirection = useResponsiveFlexDirection(flexDirection ?? direction);\n const usesCompatProps =\n container !== undefined ||\n item !== undefined ||\n lg !== undefined ||\n md !== undefined ||\n sm !== undefined ||\n spacing !== undefined ||\n sx !== undefined ||\n xl !== undefined ||\n xs !== undefined ||\n alignItems !== undefined ||\n direction !== undefined ||\n display !== undefined ||\n flexDirection !== undefined ||\n justifyContent !== undefined;\n\n if (!usesCompatProps) {\n return (\n <MantineGrid style={style as never} {...gridProps}>\n {children}\n </MantineGrid>\n );\n }\n\n if (item) {\n const itemSpan = resolveGridSpan({ lg, md, sm, xl, xs });\n const itemStyle = {\n boxSizing: \"border-box\",\n minWidth: 0,\n ...sxStyle,\n ...style,\n } as never;\n const containerStyle = {\n alignItems,\n display,\n flexDirection: resolvedFlexDirection,\n justifyContent,\n width: container ? \"100%\" : undefined,\n } as never;\n const nestedGrid = container ? (\n <GridContainerContext.Provider value>\n <MantineGrid gutter={resolveGridGap(spacing) as never} style={containerStyle}>\n {children}\n </MantineGrid>\n </GridContainerContext.Provider>\n ) : (\n children\n );\n const shouldRenderColumn =\n isInsideGridContainer || itemSpan !== undefined || order !== undefined;\n\n if (!shouldRenderColumn) {\n return (\n <MantineBox style={itemStyle} {...gridProps}>\n {nestedGrid}\n </MantineBox>\n );\n }\n\n if (!isInsideGridContainer) {\n return (\n <MantineGrid gutter={resolveGridGap(spacing) as never}>\n <MantineGrid.Col order={order as never} span={itemSpan as never} style={itemStyle}>\n {nestedGrid}\n </MantineGrid.Col>\n </MantineGrid>\n );\n }\n\n return (\n <MantineGrid.Col\n order={order as never}\n span={itemSpan as never}\n style={itemStyle}\n {...gridProps}\n >\n {nestedGrid}\n </MantineGrid.Col>\n );\n }\n\n return (\n <GridContainerContext.Provider value={Boolean(container)}>\n <MantineGrid\n gutter={resolveGridGap(spacing) as never}\n style={\n {\n alignItems,\n display,\n flexDirection: resolvedFlexDirection,\n justifyContent,\n width: container ? \"100%\" : undefined,\n ...sxStyle,\n ...style,\n } as never\n }\n {...gridProps}\n >\n {children}\n </MantineGrid>\n </GridContainerContext.Provider>\n );\n};\n\nexport const Grid = Object.assign(GridRoot, { Col: MantineGrid.Col });\n\nconst ListRoot = ({\n children,\n component,\n dense,\n disablePadding,\n sx,\n style,\n ...props\n}: LooseProps & { component?: ElementType }) => {\n const sxStyle = useSxStyle(sx);\n const Component = component || MantineList;\n return (\n <Component\n style={\n {\n \"--list-spacing\": dense ? \"var(--mantine-spacing-xs)\" : undefined,\n ...sxStyle,\n padding: disablePadding ? 0 : undefined,\n ...style,\n } as never\n }\n {...props}\n >\n {children}\n </Component>\n );\n};\n\nexport const List = Object.assign(ListRoot, { Item: MantineList.Item });\n\nexport const Paper = ({ children, className, elevation, sx, style, ...props }: LooseProps) => {\n const sxStyle = useSxStyle(sx);\n\n return (\n <MantinePaper\n className={\n elevation !== undefined || sx !== undefined\n ? withCompatClassName(\"MuiPaper-root\", \"fairmint-paper-root\", className)\n : className\n }\n shadow={elevation ? \"sm\" : undefined}\n style={(sx === undefined ? style : { ...sxStyle, ...style }) as never}\n {...props}\n >\n {children}\n </MantinePaper>\n );\n};\n\nexport const Stack = ({\n alignItems,\n children,\n direction,\n flexWrap,\n justifyContent,\n spacing,\n sx,\n style,\n useFlexGap: _useFlexGap,\n ...props\n}: StackProps) => {\n const usesCompatProps =\n alignItems !== undefined ||\n direction !== undefined ||\n flexWrap !== undefined ||\n justifyContent !== undefined ||\n spacing !== undefined ||\n sx !== undefined ||\n _useFlexGap !== undefined;\n\n const sxStyle = useSxStyle(sx);\n\n if (!usesCompatProps) {\n return (\n <MantineStack style={style as never} {...props}>\n {children}\n </MantineStack>\n );\n }\n\n return (\n <MantineFlex\n direction={direction ?? \"column\"}\n gap={resolveStackGap(spacing)}\n align={alignItems}\n justify={justifyContent}\n wrap={flexWrap as never}\n style={{ ...sxStyle, ...style } as never}\n {...props}\n >\n {children}\n </MantineFlex>\n );\n};\n\nexport {\n useClickOutside,\n useClipboard,\n useDebouncedValue,\n useDisclosure,\n useHotkeys,\n useId,\n useIntersection,\n useScrollIntoView,\n useViewportSize,\n} from \"@mantine/hooks\";\n\nconst createMediaQueryTheme = (breakpoints?: Record<string, string | undefined>) => ({\n breakpoints: {\n down: (key: string) => `(max-width: ${breakpoints?.[key] ?? key})`,\n up: (key: string) => `(min-width: ${breakpoints?.[key] ?? key})`,\n },\n});\n\ntype MediaQueryTheme = ReturnType<typeof createMediaQueryTheme>;\nconst mediaQueryTheme = createMediaQueryTheme(theme.breakpoints);\n\ntype MantineMediaQueryOptions = Parameters<typeof useMantineMediaQuery>[2];\ntype MediaQueryOptions = MantineMediaQueryOptions & {\n defaultMatches?: boolean;\n noSsr?: boolean;\n};\n\nexport const useMediaQuery = (\n query: string | ((theme: MediaQueryTheme) => string),\n initialValueOrOptions?: boolean | MediaQueryOptions,\n options?: MantineMediaQueryOptions,\n) => {\n const normalizedQuery = typeof query === \"function\" ? query(mediaQueryTheme) : query;\n let initialValue = typeof initialValueOrOptions === \"boolean\" ? initialValueOrOptions : undefined;\n let mantineOptions = options;\n\n if (typeof initialValueOrOptions === \"object\") {\n const { defaultMatches, noSsr, ...optionOverrides } = initialValueOrOptions;\n initialValue = defaultMatches;\n mantineOptions = {\n ...optionOverrides,\n getInitialValueInEffect:\n noSsr === true ? false : (optionOverrides.getInitialValueInEffect ?? true),\n };\n }\n\n return useMantineMediaQuery(normalizedQuery, initialValue, mantineOptions);\n};\n"],"names":["createContext","sx","useSxStyle","MantineBox","jsx","useFairmintMantineTheme","useMantineMediaQuery","MantineContainer","MantineCollapse","MantineDivider","useContext","MantineGrid","MantineList","MantinePaper","MantineStack","MantineFlex","theme"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useMediaQuery as useMantineMediaQuery } from '@mantine/hooks';
|
|
2
2
|
import { ElementType, ReactNode } from 'react';
|
|
3
3
|
import { Sx, SxObject } from './sx';
|
|
4
|
-
export { Anchor, AppShell, type AppShellProps, Burger, Center, Flex, Group, type GroupProps, NavLink, Notification, NumberInput, type NumberInputProps, Pagination, PinInput, ScrollArea, SegmentedControl, SimpleGrid, Space, Stepper,
|
|
4
|
+
export { Anchor, AppShell, type AppShellProps, Burger, Center, Flex, Group, type GroupProps, NavLink, Notification, NumberInput, type NumberInputProps, Pagination, PinInput, ScrollArea, SegmentedControl, SimpleGrid, Space, Stepper, ThemeIcon, type ThemeIconProps, Title, type TitleProps, UnstyledButton, useComputedColorScheme, useMantineTheme, } from '@mantine/core';
|
|
5
|
+
export { Text, type TextProps } from './Text/Text';
|
|
5
6
|
type LooseProps = Record<string, unknown> & {
|
|
6
7
|
children?: ReactNode;
|
|
7
8
|
className?: string;
|