@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/mantine-adapter.cjs +11 -1
  3. package/dist/mantine-adapter.cjs.map +1 -1
  4. package/dist/mantine-adapter.css +1 -1
  5. package/dist/mantine-adapter.js +2203 -1995
  6. package/dist/mantine-adapter.js.map +1 -1
  7. package/dist/src/components/Accordion/Accordion.d.ts +3 -4
  8. package/dist/src/components/AutoComplete/AutoComplete.d.ts +4 -6
  9. package/dist/src/components/Avatar/Avatar.d.ts +2 -3
  10. package/dist/src/components/Badge/Badge.d.ts +1 -1
  11. package/dist/src/components/Button/Button.d.ts +1 -1
  12. package/dist/src/components/Card/Card.d.ts +10 -2
  13. package/dist/src/components/Checkbox/CheckboxGroup.d.ts +2 -6
  14. package/dist/src/components/Container/Container.d.ts +14 -2
  15. package/dist/src/components/DatePicker/DatePicker.d.ts +1 -5
  16. package/dist/src/components/Dropdown/Dropdown.d.ts +1 -1
  17. package/dist/src/components/Flex/Flex.d.ts +26 -3
  18. package/dist/src/components/FormControlWrapper/FormControlWrapper.d.ts +1 -0
  19. package/dist/src/components/Group/Group.d.ts +14 -2
  20. package/dist/src/components/Link/Link.d.ts +3 -4
  21. package/dist/src/components/Menu/Menu.d.ts +2 -2
  22. package/dist/src/components/Panel/Panel.d.ts +6 -4
  23. package/dist/src/components/Radio/RadioGroup.d.ts +2 -6
  24. package/dist/src/components/Slider/Slider.d.ts +1 -5
  25. package/dist/src/components/Stack/Stack.d.ts +27 -4
  26. package/dist/src/components/Stepper/Stepper.d.ts +4 -2
  27. package/dist/src/components/Switch/SwitchGroup.d.ts +2 -6
  28. package/dist/src/components/Table/Table.d.ts +16 -3
  29. package/dist/src/components/Tabs/Tabs.d.ts +4 -2
  30. package/dist/src/components/Text/Text.d.ts +3 -2
  31. package/dist/src/components/TextArea/TextArea.d.ts +1 -1
  32. package/dist/src/components/TextField/TextField.d.ts +1 -5
  33. package/dist/src/components/Title/Title.d.ts +2 -1
  34. package/dist/src/components/index.d.ts +1 -0
  35. package/dist/src/index.d.ts +153 -1
  36. package/dist/src/utils/filterStylingProps.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/src/OverStyling.tsx +67 -3
  39. package/src/components/Accordion/Accordion.tsx +1 -1
  40. package/src/components/AutoComplete/AutoComplete.tsx +13 -4
  41. package/src/components/Avatar/Avatar.tsx +1 -1
  42. package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +7 -0
  43. package/src/components/Card/Card.module.css +1 -0
  44. package/src/components/Card/Card.tsx +27 -1
  45. package/src/components/Checkbox/CheckboxGroup.tsx +6 -3
  46. package/src/components/Container/Container.tsx +4 -2
  47. package/src/components/DatePicker/DatePicker.tsx +1 -3
  48. package/src/components/Dropdown/Dropdown.tsx +4 -11
  49. package/src/components/Flex/Flex.tsx +7 -2
  50. package/src/components/FormControlWrapper/FormControlWrapper.tsx +1 -0
  51. package/src/components/Group/Group.tsx +7 -2
  52. package/src/components/Link/Link.tsx +3 -3
  53. package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +3 -3
  54. package/src/components/Panel/Panel.stories.tsx +8 -8
  55. package/src/components/Panel/Panel.tsx +11 -4
  56. package/src/components/Radio/RadioGroup.tsx +6 -3
  57. package/src/components/ReadOnlyField/ReadOnlyField.tsx +5 -1
  58. package/src/components/Stack/Stack.tsx +7 -2
  59. package/src/components/Stepper/Stepper.tsx +5 -1
  60. package/src/components/Switch/SwitchGroup.tsx +6 -3
  61. package/src/components/Table/Table.module.css +7 -0
  62. package/src/components/Table/Table.stories.tsx +33 -3
  63. package/src/components/Table/Table.tsx +56 -5
  64. package/src/components/Tabs/Tabs.tsx +5 -1
  65. package/src/components/Text/Text.tsx +3 -1
  66. package/src/components/TextArea/TextArea.tsx +2 -9
  67. package/src/components/Title/Title.tsx +3 -1
  68. package/src/components/index.ts +1 -0
  69. package/src/index.ts +168 -1
  70. 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 { mapLayoutProps } from "../../utils/filterStylingProps";
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 = MantineGroupProps & RecursicaGroupProps;
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 React, { forwardRef } from "react";
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 Position Override
58
+ ## 4. Default Placement Override
59
59
 
60
- **Decision:** Recursica defaults `position` to `"right"`. Mantine defaults to `"left"`.
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 set before the prop spread, so developer-provided `position` values still take precedence. Right-side panels are the most common pattern for supplementary content, settings, and detail views.
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
- position: {
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" position="right">
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
- position: "right",
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
- position="right"
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 LeftPosition: Story = {
121
+ export const LeftPlacement: Story = {
122
122
  args: {
123
- position: "left",
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
- position: "right",
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
- position: "right",
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" position="right">
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
- position = "right",
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={position} /* Recursica default: right; Mantine default: left */
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<MantineRadioGroupProps, "size" | "labelProps">,
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 ? <Renderer value={value} /> : value;
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 { mapLayoutProps } from "../../utils/filterStylingProps";
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 = MantineStackProps & RecursicaStackProps;
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 type StepperProps = RecursicaOverStyled<RecursicaStepperProps>;
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<MantineSwitchGroupProps, "size" | "labelProps">,
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}
@@ -0,0 +1,7 @@
1
+ /* HARDCODED VALUES:
2
+ * None. This is a generic layout wrapper.
3
+ */
4
+
5
+ .root {
6
+ /* Mantine Table handles table layout natively. */
7
+ }
@@ -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/🚧 Table",
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: () => <ComingSoon componentName="Table" />,
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 React from "react";
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 = React.HTMLAttributes<HTMLDivElement> &
5
- RecursicaTableProps;
13
+ export type TableProps = RecursicaOverStyled<
14
+ MantineTableProps & RecursicaTableProps
15
+ >;
6
16
 
7
- export const Table: React.FC<TableProps> = (props) => {
8
- return <div {...props}>Table</div>;
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 type TabsProps = RecursicaOverStyled<RecursicaTabsProps>;
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<RecursicaTextProps>;
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
- Pick<
22
+ Omit<
23
23
  RecursicaFormControlWrapperProps,
24
- | "assistiveText"
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<RecursicaTitleProps>;
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.
@@ -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
- export * from "./components";
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";
@@ -66,6 +66,7 @@ export {
66
66
  type RecursicaOverStyled,
67
67
  type BlockedStylingKeys,
68
68
  type ForbiddenStyles,
69
+ type WithRecursicaSpacing,
69
70
  } from "@recursica/adapter-common";
70
71
 
71
72
  const LAYOUT_PROPS = new Set([