@recursica/mantine-adapter 0.26.1 → 0.28.0
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/CHANGELOG.md +22 -0
- package/dist/mantine-adapter.cjs +11 -1
- package/dist/mantine-adapter.cjs.map +1 -1
- package/dist/mantine-adapter.css +1 -1
- package/dist/mantine-adapter.js +2203 -1995
- package/dist/mantine-adapter.js.map +1 -1
- package/dist/src/components/Accordion/Accordion.d.ts +3 -4
- package/dist/src/components/AutoComplete/AutoComplete.d.ts +4 -6
- package/dist/src/components/Avatar/Avatar.d.ts +2 -3
- package/dist/src/components/Badge/Badge.d.ts +1 -1
- package/dist/src/components/Button/Button.d.ts +1 -1
- package/dist/src/components/Card/Card.d.ts +10 -2
- package/dist/src/components/Checkbox/CheckboxGroup.d.ts +2 -6
- package/dist/src/components/Container/Container.d.ts +14 -2
- package/dist/src/components/DatePicker/DatePicker.d.ts +1 -5
- package/dist/src/components/Dropdown/Dropdown.d.ts +1 -1
- package/dist/src/components/Flex/Flex.d.ts +26 -3
- package/dist/src/components/FormControlWrapper/FormControlWrapper.d.ts +1 -0
- package/dist/src/components/Group/Group.d.ts +14 -2
- package/dist/src/components/Link/Link.d.ts +3 -4
- package/dist/src/components/Menu/Menu.d.ts +2 -2
- package/dist/src/components/Panel/Panel.d.ts +6 -4
- package/dist/src/components/Radio/RadioGroup.d.ts +2 -6
- package/dist/src/components/Slider/Slider.d.ts +1 -5
- package/dist/src/components/Stack/Stack.d.ts +27 -4
- package/dist/src/components/Stepper/Stepper.d.ts +4 -2
- package/dist/src/components/Switch/SwitchGroup.d.ts +2 -6
- package/dist/src/components/Table/Table.d.ts +16 -3
- package/dist/src/components/Tabs/Tabs.d.ts +4 -2
- package/dist/src/components/Text/Text.d.ts +3 -2
- package/dist/src/components/TextArea/TextArea.d.ts +1 -1
- package/dist/src/components/TextField/TextField.d.ts +1 -5
- package/dist/src/components/Title/Title.d.ts +2 -1
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/index.d.ts +153 -1
- package/dist/src/utils/filterStylingProps.d.ts +1 -1
- package/package.json +1 -1
- package/src/OverStyling.tsx +67 -3
- package/src/components/Accordion/Accordion.tsx +1 -1
- package/src/components/AutoComplete/AutoComplete.tsx +13 -4
- package/src/components/Avatar/Avatar.tsx +1 -1
- package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +7 -0
- package/src/components/Card/Card.module.css +1 -0
- package/src/components/Card/Card.tsx +27 -1
- package/src/components/Checkbox/CheckboxGroup.tsx +6 -3
- package/src/components/Container/Container.tsx +4 -2
- package/src/components/DatePicker/DatePicker.tsx +1 -3
- package/src/components/Dropdown/Dropdown.tsx +4 -11
- package/src/components/Flex/Flex.tsx +7 -2
- package/src/components/FormControlWrapper/FormControlWrapper.tsx +1 -0
- package/src/components/Group/Group.tsx +7 -2
- package/src/components/Link/Link.tsx +3 -3
- package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +3 -3
- package/src/components/Panel/Panel.stories.tsx +8 -8
- package/src/components/Panel/Panel.tsx +11 -4
- package/src/components/Radio/RadioGroup.tsx +6 -3
- package/src/components/ReadOnlyField/ReadOnlyField.tsx +5 -1
- package/src/components/Stack/Stack.tsx +7 -2
- package/src/components/Stepper/Stepper.tsx +5 -1
- package/src/components/Switch/SwitchGroup.tsx +6 -3
- package/src/components/Table/Table.module.css +7 -0
- package/src/components/Table/Table.stories.tsx +33 -3
- package/src/components/Table/Table.tsx +56 -5
- package/src/components/Tabs/Tabs.tsx +5 -1
- package/src/components/Text/Text.tsx +3 -1
- package/src/components/TextArea/TextArea.tsx +2 -9
- package/src/components/Title/Title.tsx +3 -1
- package/src/components/index.ts +1 -0
- package/src/index.ts +168 -1
- package/src/utils/filterStylingProps.ts +1 -0
|
@@ -3,7 +3,10 @@ import {
|
|
|
3
3
|
Group as MantineGroup,
|
|
4
4
|
type GroupProps as MantineGroupProps,
|
|
5
5
|
} from "@mantine/core";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
mapLayoutProps,
|
|
8
|
+
type WithRecursicaSpacing,
|
|
9
|
+
} from "../../utils/filterStylingProps";
|
|
7
10
|
import styles from "./Group.module.css";
|
|
8
11
|
|
|
9
12
|
import { type RecursicaGroupProps } from "@recursica/adapter-common";
|
|
@@ -15,7 +18,9 @@ import { type RecursicaGroupProps } from "@recursica/adapter-common";
|
|
|
15
18
|
* DO NOT use the `RecursicaOverStyled` gatekeeper. Developers must be able to freely pass
|
|
16
19
|
* width, height, padding, margins, and flexbox alignment props to construct structural layouts.
|
|
17
20
|
*/
|
|
18
|
-
export type GroupProps =
|
|
21
|
+
export type GroupProps = WithRecursicaSpacing<
|
|
22
|
+
MantineGroupProps & RecursicaGroupProps
|
|
23
|
+
>;
|
|
19
24
|
|
|
20
25
|
export const Group = forwardRef<HTMLDivElement, GroupProps>(function Group(
|
|
21
26
|
{ children, gap = "rec-default", ...rest },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { forwardRef } from "react";
|
|
2
2
|
import {
|
|
3
3
|
Anchor as MantineAnchor,
|
|
4
4
|
type AnchorProps as MantineAnchorProps,
|
|
@@ -13,7 +13,7 @@ import styles from "./Link.module.css";
|
|
|
13
13
|
import { type RecursicaLinkProps } from "@recursica/adapter-common";
|
|
14
14
|
|
|
15
15
|
export type LinkProps = RecursicaOverStyled<
|
|
16
|
-
Omit<MantineAnchorProps, "underline"> & RecursicaLinkProps
|
|
16
|
+
Omit<MantineAnchorProps, "underline"> & Omit<RecursicaLinkProps, "component">
|
|
17
17
|
>;
|
|
18
18
|
|
|
19
19
|
const _Link = forwardRef<HTMLAnchorElement, LinkProps>(function Link(
|
|
@@ -49,7 +49,7 @@ const _Link = forwardRef<HTMLAnchorElement, LinkProps>(function Link(
|
|
|
49
49
|
classNames={mergedClassNames}
|
|
50
50
|
underline="never"
|
|
51
51
|
{...(icon ? { "data-has-icon": "" } : {})}
|
|
52
|
-
{...sanitizedProps}
|
|
52
|
+
{...(sanitizedProps as Record<string, unknown>)}
|
|
53
53
|
>
|
|
54
54
|
{icon && (
|
|
55
55
|
<span className={styles.iconWrapper} aria-hidden>
|
|
@@ -55,11 +55,11 @@ Other stylesNames (`overlay`, `root`, `inner`, `close`) are left to Mantine defa
|
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
58
|
-
## 4. Default
|
|
58
|
+
## 4. Default Placement Override
|
|
59
59
|
|
|
60
|
-
**Decision:**
|
|
60
|
+
**Decision:** Use `placement` instead of `position` for configuring slide-out direction, and default it to `"right"`.
|
|
61
61
|
|
|
62
|
-
**Implementation:** The `position="right"` default is
|
|
62
|
+
**Implementation:** The prop was renamed from `position` to `placement` to prevent collision with the CSS `position` keyword, which is strictly blocked by the styling gatekeeper (`BLOCKED_STYLING_KEYS`). This allows configuring the drawer direction natively while maintaining strict design-system boundaries. The `placement="right"` default is mapped internally to Mantine Drawer's `position` prop before any other sanitized props are applied. Right-side panels are the most common pattern for supplementary content, settings, and detail views.
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
@@ -12,7 +12,7 @@ const meta: Meta = {
|
|
|
12
12
|
component: Panel,
|
|
13
13
|
tags: ["autodocs"],
|
|
14
14
|
argTypes: {
|
|
15
|
-
|
|
15
|
+
placement: {
|
|
16
16
|
control: "select",
|
|
17
17
|
options: ["left", "right", "top", "bottom"],
|
|
18
18
|
description: "Side of the screen the panel slides in from.",
|
|
@@ -58,7 +58,7 @@ The \`Panel\` component slides in or expands from the edge of the screen to reve
|
|
|
58
58
|
const [opened, { open, close }] = useDisclosure(false);
|
|
59
59
|
|
|
60
60
|
<Button onClick={open}>Open Panel</Button>
|
|
61
|
-
<Panel opened={opened} onClose={close} title="Settings"
|
|
61
|
+
<Panel opened={opened} onClose={close} title="Settings" placement="right">
|
|
62
62
|
Content goes here
|
|
63
63
|
<Panel.Footer>
|
|
64
64
|
<Button variant="outline">Cancel</Button>
|
|
@@ -78,7 +78,7 @@ type Story = StoryObj<PanelStoryArgs>;
|
|
|
78
78
|
|
|
79
79
|
export const Default: Story = {
|
|
80
80
|
args: {
|
|
81
|
-
|
|
81
|
+
placement: "right",
|
|
82
82
|
title: "Panel Title",
|
|
83
83
|
withOverlay: true,
|
|
84
84
|
withCloseButton: true,
|
|
@@ -98,7 +98,7 @@ export const Default: Story = {
|
|
|
98
98
|
opened={opened}
|
|
99
99
|
onClose={() => setOpened(false)}
|
|
100
100
|
title="Panel Title"
|
|
101
|
-
|
|
101
|
+
placement="right"
|
|
102
102
|
wrapHeaderText={wrapHeaderText}
|
|
103
103
|
>
|
|
104
104
|
<Text>
|
|
@@ -118,9 +118,9 @@ export const Default: Story = {
|
|
|
118
118
|
},
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
-
export const
|
|
121
|
+
export const LeftPlacement: Story = {
|
|
122
122
|
args: {
|
|
123
|
-
|
|
123
|
+
placement: "left",
|
|
124
124
|
title: "Navigation",
|
|
125
125
|
withOverlay: true,
|
|
126
126
|
withCloseButton: true,
|
|
@@ -153,7 +153,7 @@ export const LeftPosition: Story = {
|
|
|
153
153
|
|
|
154
154
|
export const ScrollableContent: Story = {
|
|
155
155
|
args: {
|
|
156
|
-
|
|
156
|
+
placement: "right",
|
|
157
157
|
title: "Scrollable Panel",
|
|
158
158
|
withOverlay: true,
|
|
159
159
|
withCloseButton: true,
|
|
@@ -195,7 +195,7 @@ export const ScrollableContent: Story = {
|
|
|
195
195
|
|
|
196
196
|
export const LongTitle: Story = {
|
|
197
197
|
args: {
|
|
198
|
-
|
|
198
|
+
placement: "right",
|
|
199
199
|
title:
|
|
200
200
|
"This is a ridiculously long panel title designed to test how the header CSS handles text overflow and whether it truncates correctly or breaks the layout",
|
|
201
201
|
withOverlay: true,
|
|
@@ -13,11 +13,18 @@ import styles from "./Panel.module.css";
|
|
|
13
13
|
// PANEL (Drawer)
|
|
14
14
|
// ============================================================
|
|
15
15
|
|
|
16
|
-
import { type RecursicaPanelProps } from "@recursica/adapter-common";
|
|
16
|
+
import { type RecursicaPanelProps as BaseRecursicaPanelProps } from "@recursica/adapter-common";
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Recursica Panel root props. Extends Mantine Drawer.
|
|
20
20
|
*/
|
|
21
|
+
export interface RecursicaPanelProps
|
|
22
|
+
extends Omit<
|
|
23
|
+
MantineDrawerProps,
|
|
24
|
+
"size" | "styles" | "classNames" | "style" | "position"
|
|
25
|
+
>,
|
|
26
|
+
BaseRecursicaPanelProps {}
|
|
27
|
+
|
|
21
28
|
export type PanelProps = RecursicaOverStyled<RecursicaPanelProps>;
|
|
22
29
|
|
|
23
30
|
/**
|
|
@@ -29,7 +36,7 @@ export type PanelProps = RecursicaOverStyled<RecursicaPanelProps>;
|
|
|
29
36
|
* cluttering the main interface.
|
|
30
37
|
*
|
|
31
38
|
* ```tsx
|
|
32
|
-
* <Panel opened={opened} onClose={close} title="Panel Title"
|
|
39
|
+
* <Panel opened={opened} onClose={close} title="Panel Title" placement="right">
|
|
33
40
|
* <Panel.Body>
|
|
34
41
|
* Content goes here
|
|
35
42
|
* </Panel.Body>
|
|
@@ -48,7 +55,7 @@ export type PanelProps = RecursicaOverStyled<RecursicaPanelProps>;
|
|
|
48
55
|
*/
|
|
49
56
|
const PanelBase = function Panel({
|
|
50
57
|
overStyled = false,
|
|
51
|
-
|
|
58
|
+
placement = "right",
|
|
52
59
|
keepMounted = true,
|
|
53
60
|
wrapHeaderText = false,
|
|
54
61
|
...rest
|
|
@@ -82,7 +89,7 @@ const PanelBase = function Panel({
|
|
|
82
89
|
|
|
83
90
|
return (
|
|
84
91
|
<MantineDrawer
|
|
85
|
-
position={
|
|
92
|
+
position={placement} /* Recursica default: right; Mantine default: left */
|
|
86
93
|
keepMounted={keepMounted}
|
|
87
94
|
closeOnClickOutside={rest.closeOnClickOutside ?? Boolean(rest.opened)}
|
|
88
95
|
{...(sanitizedProps as unknown as MantineDrawerProps)}
|
|
@@ -16,7 +16,10 @@ import styles from "./Radio.module.css";
|
|
|
16
16
|
import { type RecursicaRadioGroupProps as BaseRecursicaRadioGroupProps } from "@recursica/adapter-common";
|
|
17
17
|
|
|
18
18
|
export interface RecursicaRadioGroupProps
|
|
19
|
-
extends Omit<
|
|
19
|
+
extends Omit<
|
|
20
|
+
MantineRadioGroupProps,
|
|
21
|
+
"size" | "labelProps" | "defaultValue" | "value" | "onChange"
|
|
22
|
+
>,
|
|
20
23
|
Omit<
|
|
21
24
|
RecursicaFormControlWrapperProps,
|
|
22
25
|
"controlMaxWidth" | "controlMinWidth"
|
|
@@ -98,8 +101,8 @@ export const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(
|
|
|
98
101
|
/* Natively bind local disabled lock dynamically */
|
|
99
102
|
{...(sanitizedProps as unknown as MantineRadioGroupProps)}
|
|
100
103
|
disabled={readOnly || (restRecord as any).disabled}
|
|
101
|
-
value={value}
|
|
102
|
-
defaultValue={defaultValue}
|
|
104
|
+
value={value as any}
|
|
105
|
+
defaultValue={defaultValue as any}
|
|
103
106
|
>
|
|
104
107
|
<div className={styles.groupRoot} data-layout={formLayout}>
|
|
105
108
|
{children}
|
|
@@ -55,7 +55,11 @@ export const ReadOnlyField = forwardRef<HTMLDivElement, ReadOnlyFieldProps>(
|
|
|
55
55
|
? (Renderer as any).check(value)
|
|
56
56
|
: EmptyValueRenderer.check(value);
|
|
57
57
|
|
|
58
|
-
const displayValue = isValueEmpty ?
|
|
58
|
+
const displayValue = isValueEmpty ? (
|
|
59
|
+
<Renderer value={value as any} />
|
|
60
|
+
) : (
|
|
61
|
+
value
|
|
62
|
+
);
|
|
59
63
|
|
|
60
64
|
switch (type) {
|
|
61
65
|
case "boolean":
|
|
@@ -4,7 +4,10 @@ import {
|
|
|
4
4
|
type StackProps as MantineStackProps,
|
|
5
5
|
createPolymorphicComponent,
|
|
6
6
|
} from "@mantine/core";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
mapLayoutProps,
|
|
9
|
+
type WithRecursicaSpacing,
|
|
10
|
+
} from "../../utils/filterStylingProps";
|
|
8
11
|
import styles from "./Stack.module.css";
|
|
9
12
|
|
|
10
13
|
import { type RecursicaStackProps } from "@recursica/adapter-common";
|
|
@@ -16,7 +19,9 @@ import { type RecursicaStackProps } from "@recursica/adapter-common";
|
|
|
16
19
|
* DO NOT use the `RecursicaOverStyled` gatekeeper. Developers must be able to freely pass
|
|
17
20
|
* width, height, padding, margins, and flexbox alignment props to construct structural layouts.
|
|
18
21
|
*/
|
|
19
|
-
export type StackProps =
|
|
22
|
+
export type StackProps = WithRecursicaSpacing<
|
|
23
|
+
MantineStackProps & RecursicaStackProps
|
|
24
|
+
>;
|
|
20
25
|
|
|
21
26
|
const _Stack = forwardRef<HTMLDivElement, StackProps>(function Stack(
|
|
22
27
|
{ children, gap = "rec-default", ...rest },
|
|
@@ -11,7 +11,11 @@ import styles from "./Stepper.module.css";
|
|
|
11
11
|
|
|
12
12
|
import { type RecursicaStepperProps } from "@recursica/adapter-common";
|
|
13
13
|
|
|
14
|
-
export
|
|
14
|
+
export interface RecursicaStepperPropsExtended
|
|
15
|
+
extends Omit<MantineStepperProps, "size">,
|
|
16
|
+
RecursicaStepperProps {}
|
|
17
|
+
|
|
18
|
+
export type StepperProps = RecursicaOverStyled<RecursicaStepperPropsExtended>;
|
|
15
19
|
|
|
16
20
|
const _Stepper = forwardRef<HTMLDivElement, StepperProps>(
|
|
17
21
|
function Stepper(props, ref) {
|
|
@@ -16,7 +16,10 @@ import styles from "./Switch.module.css";
|
|
|
16
16
|
import { type RecursicaSwitchGroupProps as BaseRecursicaSwitchGroupProps } from "@recursica/adapter-common";
|
|
17
17
|
|
|
18
18
|
export interface RecursicaSwitchGroupProps
|
|
19
|
-
extends Omit<
|
|
19
|
+
extends Omit<
|
|
20
|
+
MantineSwitchGroupProps,
|
|
21
|
+
"size" | "labelProps" | "defaultValue" | "value" | "onChange"
|
|
22
|
+
>,
|
|
20
23
|
Omit<
|
|
21
24
|
RecursicaFormControlWrapperProps,
|
|
22
25
|
"controlMaxWidth" | "controlMinWidth"
|
|
@@ -98,8 +101,8 @@ export const SwitchGroup = forwardRef<HTMLDivElement, SwitchGroupProps>(
|
|
|
98
101
|
/* Natively bind local disabled lock dynamically */
|
|
99
102
|
{...(sanitizedProps as unknown as MantineSwitchGroupProps)}
|
|
100
103
|
disabled={readOnly || (restRecord as any).disabled}
|
|
101
|
-
value={value}
|
|
102
|
-
defaultValue={defaultValue}
|
|
104
|
+
value={value as any}
|
|
105
|
+
defaultValue={defaultValue as any}
|
|
103
106
|
>
|
|
104
107
|
<div className={styles.groupRoot} data-layout={formLayout}>
|
|
105
108
|
{children}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
2
|
import { Table } from "./Table";
|
|
3
|
-
import { ComingSoon } from "@recursica/storybook-template";
|
|
4
3
|
|
|
5
4
|
const meta: Meta<typeof Table> = {
|
|
6
|
-
title: "UI-Kit
|
|
5
|
+
title: "UI-Kit/Table",
|
|
7
6
|
component: Table,
|
|
8
7
|
tags: ["autodocs"],
|
|
9
8
|
};
|
|
@@ -12,6 +11,37 @@ export default meta;
|
|
|
12
11
|
|
|
13
12
|
type Story = StoryObj<typeof Table>;
|
|
14
13
|
|
|
14
|
+
const elements = [
|
|
15
|
+
{ position: 6, mass: 12.011, symbol: "C", name: "Carbon" },
|
|
16
|
+
{ position: 7, mass: 14.007, symbol: "N", name: "Nitrogen" },
|
|
17
|
+
{ position: 8, mass: 15.999, symbol: "O", name: "Oxygen" },
|
|
18
|
+
{ position: 9, mass: 18.998, symbol: "F", name: "Fluorine" },
|
|
19
|
+
{ position: 10, mass: 20.18, symbol: "Ne", name: "Neon" },
|
|
20
|
+
];
|
|
21
|
+
|
|
15
22
|
export const Default: Story = {
|
|
16
|
-
render: () =>
|
|
23
|
+
render: () => {
|
|
24
|
+
const rows = elements.map((element) => (
|
|
25
|
+
<Table.Tr key={element.name}>
|
|
26
|
+
<Table.Td>{element.position}</Table.Td>
|
|
27
|
+
<Table.Td>{element.name}</Table.Td>
|
|
28
|
+
<Table.Td>{element.symbol}</Table.Td>
|
|
29
|
+
<Table.Td>{element.mass}</Table.Td>
|
|
30
|
+
</Table.Tr>
|
|
31
|
+
));
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<Table>
|
|
35
|
+
<Table.Thead>
|
|
36
|
+
<Table.Tr>
|
|
37
|
+
<Table.Th>Element position</Table.Th>
|
|
38
|
+
<Table.Th>Element name</Table.Th>
|
|
39
|
+
<Table.Th>Symbol</Table.Th>
|
|
40
|
+
<Table.Th>Atomic mass</Table.Th>
|
|
41
|
+
</Table.Tr>
|
|
42
|
+
</Table.Thead>
|
|
43
|
+
<Table.Tbody>{rows}</Table.Tbody>
|
|
44
|
+
</Table>
|
|
45
|
+
);
|
|
46
|
+
},
|
|
17
47
|
};
|
|
@@ -1,9 +1,60 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { forwardRef } from "react";
|
|
2
|
+
import {
|
|
3
|
+
Table as MantineTable,
|
|
4
|
+
type TableProps as MantineTableProps,
|
|
5
|
+
} from "@mantine/core";
|
|
6
|
+
import {
|
|
7
|
+
filterStylingProps,
|
|
8
|
+
type RecursicaOverStyled,
|
|
9
|
+
} from "../../utils/filterStylingProps";
|
|
2
10
|
import { type RecursicaTableProps } from "@recursica/adapter-common";
|
|
11
|
+
import styles from "./Table.module.css";
|
|
3
12
|
|
|
4
|
-
export type TableProps =
|
|
5
|
-
RecursicaTableProps
|
|
13
|
+
export type TableProps = RecursicaOverStyled<
|
|
14
|
+
MantineTableProps & RecursicaTableProps
|
|
15
|
+
>;
|
|
6
16
|
|
|
7
|
-
|
|
8
|
-
|
|
17
|
+
const TableBase = forwardRef<HTMLTableElement, TableProps>(function Table(
|
|
18
|
+
{ overStyled = false, ...rest },
|
|
19
|
+
ref,
|
|
20
|
+
) {
|
|
21
|
+
const sanitizedProps = filterStylingProps(rest, overStyled);
|
|
22
|
+
const classNameProp = (sanitizedProps as Record<string, unknown>)
|
|
23
|
+
.className as string | undefined;
|
|
24
|
+
|
|
25
|
+
const rootClass = styles.root;
|
|
26
|
+
const finalClass = classNameProp
|
|
27
|
+
? `${rootClass} ${classNameProp}`
|
|
28
|
+
: rootClass;
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<MantineTable
|
|
32
|
+
ref={ref}
|
|
33
|
+
className={finalClass}
|
|
34
|
+
{...(sanitizedProps as unknown as MantineTableProps)}
|
|
35
|
+
/>
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
TableBase.displayName = "Table";
|
|
40
|
+
|
|
41
|
+
type TableComponent = typeof TableBase & {
|
|
42
|
+
Thead: typeof MantineTable.Thead;
|
|
43
|
+
Tbody: typeof MantineTable.Tbody;
|
|
44
|
+
Tr: typeof MantineTable.Tr;
|
|
45
|
+
Th: typeof MantineTable.Th;
|
|
46
|
+
Td: typeof MantineTable.Td;
|
|
47
|
+
Tfoot: typeof MantineTable.Tfoot;
|
|
48
|
+
Caption: typeof MantineTable.Caption;
|
|
49
|
+
ScrollContainer: typeof MantineTable.ScrollContainer;
|
|
9
50
|
};
|
|
51
|
+
|
|
52
|
+
export const Table = TableBase as TableComponent;
|
|
53
|
+
Table.Thead = MantineTable.Thead;
|
|
54
|
+
Table.Tbody = MantineTable.Tbody;
|
|
55
|
+
Table.Tr = MantineTable.Tr;
|
|
56
|
+
Table.Th = MantineTable.Th;
|
|
57
|
+
Table.Td = MantineTable.Td;
|
|
58
|
+
Table.Tfoot = MantineTable.Tfoot;
|
|
59
|
+
Table.Caption = MantineTable.Caption;
|
|
60
|
+
Table.ScrollContainer = MantineTable.ScrollContainer;
|
|
@@ -14,7 +14,11 @@ import styles from "./Tabs.module.css";
|
|
|
14
14
|
|
|
15
15
|
import { type RecursicaTabsProps } from "@recursica/adapter-common";
|
|
16
16
|
|
|
17
|
-
export
|
|
17
|
+
export interface RecursicaTabsPropsExtended
|
|
18
|
+
extends Omit<MantineTabsProps, "variant">,
|
|
19
|
+
RecursicaTabsProps {}
|
|
20
|
+
|
|
21
|
+
export type TabsProps = RecursicaOverStyled<RecursicaTabsPropsExtended>;
|
|
18
22
|
|
|
19
23
|
const _Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(props, ref) {
|
|
20
24
|
const {
|
|
@@ -11,7 +11,9 @@ import {
|
|
|
11
11
|
|
|
12
12
|
import { type RecursicaTextProps } from "@recursica/adapter-common";
|
|
13
13
|
|
|
14
|
-
export type TextProps = RecursicaOverStyled<
|
|
14
|
+
export type TextProps = RecursicaOverStyled<
|
|
15
|
+
Omit<MantineTextProps, "variant"> & RecursicaTextProps
|
|
16
|
+
>;
|
|
15
17
|
|
|
16
18
|
const _Text = forwardRef<HTMLDivElement, TextProps>(function Text(
|
|
17
19
|
{ overStyled = false, variant = "body", ...rest },
|
|
@@ -19,16 +19,9 @@ export interface RecursicaTextAreaProps
|
|
|
19
19
|
MantineTextareaProps,
|
|
20
20
|
"size" | "variant" | "radius" | "wrapperProps"
|
|
21
21
|
>,
|
|
22
|
-
|
|
22
|
+
Omit<
|
|
23
23
|
RecursicaFormControlWrapperProps,
|
|
24
|
-
| "
|
|
25
|
-
| "assistiveWithIcon"
|
|
26
|
-
| "formLayout"
|
|
27
|
-
| "labelSize"
|
|
28
|
-
| "labelAlignment"
|
|
29
|
-
| "labelOptionalText"
|
|
30
|
-
| "labelWithEditIcon"
|
|
31
|
-
| "onLabelEditClick"
|
|
24
|
+
"controlMaxWidth" | "controlMinWidth"
|
|
32
25
|
>,
|
|
33
26
|
ReadOnlyControlProps,
|
|
34
27
|
BaseRecursicaTextAreaProps {}
|
|
@@ -10,7 +10,9 @@ import {
|
|
|
10
10
|
|
|
11
11
|
import { type RecursicaTitleProps } from "@recursica/adapter-common";
|
|
12
12
|
|
|
13
|
-
export type TitleProps = RecursicaOverStyled<
|
|
13
|
+
export type TitleProps = RecursicaOverStyled<
|
|
14
|
+
Omit<MantineTitleProps, "size"> & RecursicaTitleProps
|
|
15
|
+
>;
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* Enforces highly accessible structural markup utilizing semantic `<h1>` through `<h6>` tags securely bound directly to Recursica typographic scales.
|
package/src/components/index.ts
CHANGED
|
@@ -42,6 +42,7 @@ export * from "./TextArea/TextArea";
|
|
|
42
42
|
export * from "./TextField/TextField";
|
|
43
43
|
export * from "./TimePicker/TimePicker";
|
|
44
44
|
export * from "./Timeline/Timeline";
|
|
45
|
+
export * from "./Timeline/TimelineItem";
|
|
45
46
|
export * from "./Title/Title";
|
|
46
47
|
export * from "./Toast";
|
|
47
48
|
export * from "./Tooltip/Tooltip";
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,170 @@
|
|
|
1
1
|
import "@recursica/adapter-common/style.css";
|
|
2
|
-
|
|
2
|
+
import * as rawComponents from "./components";
|
|
3
|
+
import { wrapComponent } from "@recursica/adapter-common";
|
|
4
|
+
|
|
3
5
|
export * from "@recursica/adapter-common";
|
|
6
|
+
|
|
7
|
+
// Expose unwrapped structural layout primitives to preserve their polymorphic types
|
|
8
|
+
export const Flex = rawComponents.Flex;
|
|
9
|
+
export const Group = rawComponents.Group;
|
|
10
|
+
export const Stack = rawComponents.Stack;
|
|
11
|
+
export const Container = rawComponents.Container;
|
|
12
|
+
export const Link = rawComponents.Link;
|
|
13
|
+
export const Text = rawComponents.Text;
|
|
14
|
+
|
|
15
|
+
// Statically wrap and export components to inject overStyled visual highlight in dev mode
|
|
16
|
+
export const Accordion = wrapComponent(
|
|
17
|
+
rawComponents.Accordion,
|
|
18
|
+
) as typeof rawComponents.Accordion;
|
|
19
|
+
export const AccordionItem = wrapComponent(
|
|
20
|
+
rawComponents.AccordionItem,
|
|
21
|
+
) as typeof rawComponents.AccordionItem;
|
|
22
|
+
export const AccordionControl = wrapComponent(
|
|
23
|
+
rawComponents.AccordionControl,
|
|
24
|
+
) as typeof rawComponents.AccordionControl;
|
|
25
|
+
export const AccordionPanel = wrapComponent(
|
|
26
|
+
rawComponents.AccordionPanel,
|
|
27
|
+
) as typeof rawComponents.AccordionPanel;
|
|
28
|
+
export const AutoComplete = wrapComponent(
|
|
29
|
+
rawComponents.AutoComplete,
|
|
30
|
+
) as typeof rawComponents.AutoComplete;
|
|
31
|
+
export const Avatar = wrapComponent(
|
|
32
|
+
rawComponents.Avatar,
|
|
33
|
+
) as typeof rawComponents.Avatar;
|
|
34
|
+
export const Badge = wrapComponent(
|
|
35
|
+
rawComponents.Badge,
|
|
36
|
+
) as typeof rawComponents.Badge;
|
|
37
|
+
export const Breadcrumb = wrapComponent(
|
|
38
|
+
rawComponents.Breadcrumb,
|
|
39
|
+
) as typeof rawComponents.Breadcrumb;
|
|
40
|
+
export const Button = wrapComponent(
|
|
41
|
+
rawComponents.Button,
|
|
42
|
+
) as typeof rawComponents.Button;
|
|
43
|
+
export const Card = wrapComponent(
|
|
44
|
+
rawComponents.Card,
|
|
45
|
+
) as typeof rawComponents.Card;
|
|
46
|
+
export const Checkbox = wrapComponent(
|
|
47
|
+
rawComponents.Checkbox,
|
|
48
|
+
) as typeof rawComponents.Checkbox;
|
|
49
|
+
export const CheckboxGroup = wrapComponent(
|
|
50
|
+
rawComponents.CheckboxGroup,
|
|
51
|
+
) as typeof rawComponents.CheckboxGroup;
|
|
52
|
+
export const Chip = wrapComponent(
|
|
53
|
+
rawComponents.Chip,
|
|
54
|
+
) as typeof rawComponents.Chip;
|
|
55
|
+
export const DatePicker = wrapComponent(
|
|
56
|
+
rawComponents.DatePicker,
|
|
57
|
+
) as typeof rawComponents.DatePicker;
|
|
58
|
+
export const Dropdown = wrapComponent(
|
|
59
|
+
rawComponents.Dropdown,
|
|
60
|
+
) as typeof rawComponents.Dropdown;
|
|
61
|
+
export const FileInput = wrapComponent(
|
|
62
|
+
rawComponents.FileInput,
|
|
63
|
+
) as typeof rawComponents.FileInput;
|
|
64
|
+
export const FileUpload = wrapComponent(
|
|
65
|
+
rawComponents.FileUpload,
|
|
66
|
+
) as typeof rawComponents.FileUpload;
|
|
67
|
+
export const FormControlLayout = wrapComponent(
|
|
68
|
+
rawComponents.FormControlLayout,
|
|
69
|
+
) as typeof rawComponents.FormControlLayout;
|
|
70
|
+
export const HoverCard = wrapComponent(
|
|
71
|
+
rawComponents.HoverCard,
|
|
72
|
+
) as typeof rawComponents.HoverCard;
|
|
73
|
+
export const Loader = wrapComponent(
|
|
74
|
+
rawComponents.Loader,
|
|
75
|
+
) as typeof rawComponents.Loader;
|
|
76
|
+
export const Label = wrapComponent(
|
|
77
|
+
rawComponents.Label,
|
|
78
|
+
) as typeof rawComponents.Label;
|
|
79
|
+
export const Menu = wrapComponent(
|
|
80
|
+
rawComponents.Menu,
|
|
81
|
+
) as typeof rawComponents.Menu;
|
|
82
|
+
export const Modal = wrapComponent(
|
|
83
|
+
rawComponents.Modal,
|
|
84
|
+
) as typeof rawComponents.Modal;
|
|
85
|
+
export const NumberInput = wrapComponent(
|
|
86
|
+
rawComponents.NumberInput,
|
|
87
|
+
) as typeof rawComponents.NumberInput;
|
|
88
|
+
export const Pagination = wrapComponent(
|
|
89
|
+
rawComponents.Pagination,
|
|
90
|
+
) as typeof rawComponents.Pagination;
|
|
91
|
+
export const Panel = wrapComponent(
|
|
92
|
+
rawComponents.Panel,
|
|
93
|
+
) as typeof rawComponents.Panel;
|
|
94
|
+
export const PanelFooter = wrapComponent(
|
|
95
|
+
rawComponents.PanelFooter,
|
|
96
|
+
) as typeof rawComponents.PanelFooter;
|
|
97
|
+
export const Popover = wrapComponent(
|
|
98
|
+
rawComponents.Popover,
|
|
99
|
+
) as typeof rawComponents.Popover;
|
|
100
|
+
export const Radio = wrapComponent(
|
|
101
|
+
rawComponents.Radio,
|
|
102
|
+
) as typeof rawComponents.Radio;
|
|
103
|
+
export const RadioGroup = wrapComponent(
|
|
104
|
+
rawComponents.RadioGroup,
|
|
105
|
+
) as typeof rawComponents.RadioGroup;
|
|
106
|
+
export const ReadOnlyField = wrapComponent(
|
|
107
|
+
rawComponents.ReadOnlyField,
|
|
108
|
+
) as typeof rawComponents.ReadOnlyField;
|
|
109
|
+
export const SegmentedControl = wrapComponent(
|
|
110
|
+
rawComponents.SegmentedControl,
|
|
111
|
+
) as typeof rawComponents.SegmentedControl;
|
|
112
|
+
export const Slider = wrapComponent(
|
|
113
|
+
rawComponents.Slider,
|
|
114
|
+
) as typeof rawComponents.Slider;
|
|
115
|
+
export const Stepper = wrapComponent(
|
|
116
|
+
rawComponents.Stepper,
|
|
117
|
+
) as typeof rawComponents.Stepper;
|
|
118
|
+
export const Switch = wrapComponent(
|
|
119
|
+
rawComponents.Switch,
|
|
120
|
+
) as typeof rawComponents.Switch;
|
|
121
|
+
export const SwitchGroup = wrapComponent(
|
|
122
|
+
rawComponents.SwitchGroup,
|
|
123
|
+
) as typeof rawComponents.SwitchGroup;
|
|
124
|
+
export const Table = wrapComponent(
|
|
125
|
+
rawComponents.Table,
|
|
126
|
+
) as typeof rawComponents.Table;
|
|
127
|
+
export const Tabs = wrapComponent(
|
|
128
|
+
rawComponents.Tabs,
|
|
129
|
+
) as typeof rawComponents.Tabs;
|
|
130
|
+
export const TextArea = wrapComponent(
|
|
131
|
+
rawComponents.TextArea,
|
|
132
|
+
) as typeof rawComponents.TextArea;
|
|
133
|
+
export const TextField = wrapComponent(
|
|
134
|
+
rawComponents.TextField,
|
|
135
|
+
) as typeof rawComponents.TextField;
|
|
136
|
+
export const TimePicker = wrapComponent(
|
|
137
|
+
rawComponents.TimePicker,
|
|
138
|
+
) as typeof rawComponents.TimePicker;
|
|
139
|
+
export const Timeline = wrapComponent(
|
|
140
|
+
rawComponents.Timeline,
|
|
141
|
+
) as typeof rawComponents.Timeline;
|
|
142
|
+
export const TimelineItem = wrapComponent(
|
|
143
|
+
rawComponents.TimelineItem,
|
|
144
|
+
) as typeof rawComponents.TimelineItem;
|
|
145
|
+
export const Title = wrapComponent(
|
|
146
|
+
rawComponents.Title,
|
|
147
|
+
) as typeof rawComponents.Title;
|
|
148
|
+
export const Toast = wrapComponent(
|
|
149
|
+
rawComponents.Toast,
|
|
150
|
+
) as typeof rawComponents.Toast;
|
|
151
|
+
export const Tooltip = wrapComponent(
|
|
152
|
+
rawComponents.Tooltip,
|
|
153
|
+
) as typeof rawComponents.Tooltip;
|
|
154
|
+
export const TransferList = wrapComponent(
|
|
155
|
+
rawComponents.TransferList,
|
|
156
|
+
) as typeof rawComponents.TransferList;
|
|
157
|
+
|
|
158
|
+
export type {
|
|
159
|
+
RecursicaCheckboxGroupProps,
|
|
160
|
+
RecursicaDatePickerProps,
|
|
161
|
+
RecursicaDropdownProps,
|
|
162
|
+
RecursicaNumberInputProps,
|
|
163
|
+
RecursicaRadioGroupProps,
|
|
164
|
+
RecursicaReadOnlyFieldProps,
|
|
165
|
+
RecursicaReadOnlyTextFieldProps,
|
|
166
|
+
RecursicaSliderProps,
|
|
167
|
+
RecursicaSwitchGroupProps,
|
|
168
|
+
RecursicaTextAreaProps,
|
|
169
|
+
RecursicaTextFieldProps,
|
|
170
|
+
} from "./components";
|