@recursica/mantine-adapter 0.32.0 → 0.33.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 (50) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +1 -1
  3. package/src/components/Accordion/USAGE.md +90 -0
  4. package/src/components/AssistiveElement/USAGE.md +36 -0
  5. package/src/components/AutoComplete/USAGE.md +66 -0
  6. package/src/components/Avatar/USAGE.md +65 -0
  7. package/src/components/Badge/USAGE.md +59 -0
  8. package/src/components/Breadcrumb/USAGE.md +59 -0
  9. package/src/components/Button/USAGE.md +100 -0
  10. package/src/components/Card/USAGE.md +71 -0
  11. package/src/components/Checkbox/USAGE.md +64 -0
  12. package/src/components/Chip/USAGE.md +77 -0
  13. package/src/components/Container/USAGE.md +47 -0
  14. package/src/components/DatePicker/USAGE.md +55 -0
  15. package/src/components/Dropdown/USAGE.md +51 -0
  16. package/src/components/FileInput/USAGE.md +36 -0
  17. package/src/components/FileUpload/USAGE.md +41 -0
  18. package/src/components/Flex/USAGE.md +48 -0
  19. package/src/components/FormControlLayout/USAGE.md +40 -0
  20. package/src/components/FormControlWrapper/USAGE.md +75 -0
  21. package/src/components/Group/USAGE.md +48 -0
  22. package/src/components/HoverCard/USAGE.md +121 -0
  23. package/src/components/Label/USAGE.md +87 -0
  24. package/src/components/Link/USAGE.md +69 -0
  25. package/src/components/Loader/USAGE.md +63 -0
  26. package/src/components/Menu/USAGE.md +124 -0
  27. package/src/components/Modal/USAGE.md +58 -0
  28. package/src/components/NumberInput/USAGE.md +55 -0
  29. package/src/components/Pagination/USAGE.md +55 -0
  30. package/src/components/Panel/USAGE.md +145 -0
  31. package/src/components/Popover/USAGE.md +121 -0
  32. package/src/components/Radio/USAGE.md +36 -0
  33. package/src/components/ReadOnlyField/USAGE.md +52 -0
  34. package/src/components/SegmentedControl/USAGE.md +56 -0
  35. package/src/components/Slider/USAGE.md +86 -0
  36. package/src/components/Stack/USAGE.md +48 -0
  37. package/src/components/Stepper/USAGE.md +41 -0
  38. package/src/components/Switch/USAGE.md +65 -0
  39. package/src/components/Table/USAGE.md +51 -0
  40. package/src/components/Tabs/USAGE.md +45 -0
  41. package/src/components/Text/USAGE.md +40 -0
  42. package/src/components/TextArea/USAGE.md +48 -0
  43. package/src/components/TextField/USAGE.md +60 -0
  44. package/src/components/TimePicker/USAGE.md +36 -0
  45. package/src/components/Timeline/USAGE.md +57 -0
  46. package/src/components/Title/USAGE.md +36 -0
  47. package/src/components/Toast/USAGE.md +80 -0
  48. package/src/components/Tooltip/USAGE.md +124 -0
  49. package/src/components/TransferList/USAGE.md +46 -0
  50. package/src/components/Tree/USAGE.md +46 -0
@@ -0,0 +1,48 @@
1
+ # TextArea - Usage Guide
2
+
3
+ This document describes how to integrate and use the `TextArea` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { TextArea } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { TextArea } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <TextArea label="Comments" placeholder="Leave your comments here..." />
24
+ );
25
+ }
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 3. Design System Integration
31
+
32
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
33
+
34
+ > [!IMPORTANT]
35
+ >
36
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
37
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
38
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
39
+
40
+ ---
41
+
42
+ ## 4. Key Integration Features & Constraints
43
+
44
+ The `TextArea` component is mapped explicitly to Mantine's `<Textarea>` following the same strict encapsulation rules as `TextField`.
45
+
46
+ 1. **Naked Primitive Mapping:** Mantine's `Textarea` natively executes macro-label generation. To decouple it, we explicitly disable internal labels (`label={undefined}`) and inject it purely inside our generic `FormControlWrapper`.
47
+ 2. **Text Field Token Re-Use:** Because text areas fundamentally share the same box-geometry, text, and state definitions as single-line inputs, it strictly implements the `--recursica_ui-kit_components_text-field_...` variables natively.
48
+ 3. **Autosize Handling:** The component supports Mantine's raw `autosize`, `minRows`, and `maxRows` parameters out of the box dynamically via property passthrough.
@@ -0,0 +1,60 @@
1
+ # TextField - Usage Guide
2
+
3
+ This document describes how to integrate and use the `TextField` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { TextField } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { TextField } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <TextField label="Username" placeholder="Enter your username" required />
24
+ );
25
+ }
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 3. Design System Integration
31
+
32
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
33
+
34
+ > [!IMPORTANT]
35
+ >
36
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
37
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
38
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
39
+
40
+ ---
41
+
42
+ ## 4. Key Integration Features & Constraints
43
+
44
+ ## Architectural philosophy
45
+
46
+ The `TextField` primitive intentionally ignores Mantine's built-in `<TextInput>` structure in favor of directly binding against `<Input>`.
47
+
48
+ ### 1. Bypassing `Input.Wrapper`
49
+
50
+ Because `<TextInput>` inherently renders Mantine's `Input.Wrapper` underneath the hood, utilizing it natively double-wraps our layouts causing massive DOM bloat and margin collapsing errors. By leveraging the completely naked `<Input>` primitive natively natively alongside `FormControlWrapper`, we retain full logical control of where the `label` maps, avoiding dual label conflicts or mis-aligned asterisks securely.
51
+
52
+ ### 2. State Hooks (`wrapperProps`)
53
+
54
+ Because we target `<Input>`, all dynamic UI modifiers (`disabled`, `error`, etc) must strictly be applied to the `.root` CSS module to correctly style the internal `<input>` boxes AND the nested `.[data-position]` icon sections simultaneously.
55
+
56
+ To accomplish this safely without spilling random pseudo-variables onto the input parameters, we exclusively use Mantine's `<Input wrapperProps={{...}}>` block natively locking `.root[data-error]` to correctly map Recursica UI variable hooks without breaking the DOM hierarchy natively.
57
+
58
+ ### 3. Component Definition Intersections
59
+
60
+ To strictly acquire native HTML typings, `TextField.tsx` explicitly extracts `React.ComponentPropsWithoutRef<"input">`. However, to prevent Typescript strict union collisions with overlapping Mantine definitions over functional `style` components and custom mappings natively, we meticulously omit (`Pick<InputWrapperProps, ...>`) explicit base elements to guarantee that strictly Recursica styles traverse the array flawlessly.
@@ -0,0 +1,36 @@
1
+ # TimePicker - Usage Guide
2
+
3
+ This document describes how to integrate and use the `TimePicker` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { TimePicker } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { TimePicker } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return <TimePicker label="Select Time" placeholder="Pick a time" />;
23
+ }
24
+ ```
25
+
26
+ ---
27
+
28
+ ## 3. Design System Integration
29
+
30
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
31
+
32
+ > [!IMPORTANT]
33
+ >
34
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
35
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
36
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
@@ -0,0 +1,57 @@
1
+ # Timeline - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Timeline` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Timeline } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Timeline } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <Timeline active={1}>
24
+ <Timeline.Item title="Step 1">Created branch</Timeline.Item>
25
+ <Timeline.Item title="Step 2">Pushed changes</Timeline.Item>
26
+ </Timeline>
27
+ );
28
+ }
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 3. Design System Integration
34
+
35
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
36
+
37
+ > [!IMPORTANT]
38
+ >
39
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
40
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
41
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
42
+
43
+ ---
44
+
45
+ ## 4. Key Integration Features & Constraints
46
+
47
+ ## Architecture
48
+
49
+ The `Timeline` component is a strict structural wrapper around Mantine's `<Timeline>` and `<Timeline.Item>` components.
50
+
51
+ - `Timeline.tsx` intercepts overarching properties like `lineWidth` and `bulletSize` to strip them out via `overStyled`, strictly adhering to the CSS token mapping in `.item` rules instead.
52
+ - `TimelineItem.tsx` implements a custom `timestamp` React node rendering slot to match the design system, positioning the text directly below the item's `children`.
53
+ - `TimelineItem.tsx` supports a custom `bulletVariant` prop (`"default" | "avatar" | "icon" | "icon-alternative"`) mapped onto `data-variant` to handle CSS variations dynamically.
54
+
55
+ ## Limitations & Missing Tokens
56
+
57
+ - **Avatar Bullet Size**: There is no specific pixel variable provided for the Avatar bullet size in the UI kit tokens (`avatar-size` evaluates to `"default"`). To maintain exact mathematical centering with Mantine's connector line `calc()` equations, the CSS falls back to inheriting the `default` bullet size (`20px`) for avatar nodes natively. If users supply a custom sized `img` tag, it must adhere to inline structural constraints or flex mappings.
@@ -0,0 +1,36 @@
1
+ # Title - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Title` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Title } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Title } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return <Title order={1}>This is a Heading 1</Title>;
23
+ }
24
+ ```
25
+
26
+ ---
27
+
28
+ ## 3. Design System Integration
29
+
30
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
31
+
32
+ > [!IMPORTANT]
33
+ >
34
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
35
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
36
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
@@ -0,0 +1,80 @@
1
+ # Toast - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Toast` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Toast } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Toast } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <Toast
24
+ title="Success"
25
+ message="Your action completed successfully"
26
+ state="success"
27
+ />
28
+ );
29
+ }
30
+ ```
31
+
32
+ ---
33
+
34
+ ## 3. Design System Integration
35
+
36
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
37
+
38
+ > [!IMPORTANT]
39
+ >
40
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
41
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
42
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
43
+
44
+ ---
45
+
46
+ ## 4. Key Integration Features & Constraints
47
+
48
+ ## 1. Standalone Visual Wrapper
49
+
50
+ **Decision:** We wrap `@mantine/core`'s standalone `Notification` component instead of wrapping the `@mantine/notifications` provider.
51
+
52
+ **Implementation:** The UI Kit provides variables for the `Toast` component itself (e.g., `--recursica_ui-kit_components_toast_*`). We use these variables to style the standard Mantine `Notification` element. This allows developers to use `<Toast>` manually if they want a static or inline message.
53
+
54
+ If dynamic popups are required, developers can configure `@mantine/notifications` to utilize this component or use its classes.
55
+
56
+ ---
57
+
58
+ ## 2. Variant Mapping via `data-variant`
59
+
60
+ **Decision:** `variant` props (`"default" | "error" | "success"`) are mapped directly to `data-variant` on the Mantine root `Box`.
61
+
62
+ **Implementation:** Mantine's `Notification` doesn't inherently support our custom variants out of the box in the way we want them styled. By passing `data-variant` directly to the `Box`, we can explicitly target the root element in our `Toast.module.css` (e.g., `.root[data-variant="success"]`) and pipe in the corresponding UI Kit layer colors.
63
+
64
+ ---
65
+
66
+ ## 3. Minimal CSS Override Philosophy
67
+
68
+ **Decision:** The CSS module only overrides visual design tokens (colors, typography, padding, borders, shadows).
69
+
70
+ **Implementation:** We defer layout structure, icon rendering, loader transitions, and close button mechanics to Mantine. The `border-style: none;` is hardcoded to reset any underlying styles from Mantine's defaults, ensuring a clean mapping of elevation and shadows.
71
+
72
+ ---
73
+
74
+ ## 4. Unsupported `loading` State
75
+
76
+ **Decision:** The native `loading` state is explicitly stripped and bypassed from the `<Toast />` component wrapper.
77
+
78
+ **Implementation:** Mantine's `Notification` inherently supports a `loading={true}` state that natively spins up a loader instead of an icon. However, Recursica's UI Kit strictly does not define structural tokens for loader states inside toasts.
79
+ Instead of attempting to tightly couple the internal `Loader` abstraction or mapping variables incorrectly, the `loading` property is explicitly omitted and `false`-enforced from the public API.
80
+ If consumers explicitly require a loading toast, they must manually inject a `<Loader />` component into the `icon` slot.
@@ -0,0 +1,124 @@
1
+ # Tooltip - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Tooltip` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Tooltip } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Tooltip } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <Tooltip label="This is a helpful tooltip">
24
+ <Button variant="primary">Hover Me</Button>
25
+ </Tooltip>
26
+ );
27
+ }
28
+ ```
29
+
30
+ ---
31
+
32
+ ## 3. Design System Integration
33
+
34
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
35
+
36
+ > [!IMPORTANT]
37
+ >
38
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
39
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
40
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
41
+
42
+ ---
43
+
44
+ ## 4. Key Integration Features & Constraints
45
+
46
+ ## 1. Single Component API (Not Composable)
47
+
48
+ **Decision:** Unlike HoverCard (which uses `HoverCard` + `HoverCard.Target` + `HoverCard.Dropdown`), Tooltip is a single wrapper component.
49
+
50
+ **Implementation:** Mantine's `Tooltip` takes content via a `label` prop and wraps the trigger element as `children`. There are no separate Target/Dropdown sub-components. The Recursica wrapper preserves this exact API.
51
+
52
+ **Static sub-components:** `Tooltip.Floating` and `Tooltip.Group` are exposed as pass-through references to Mantine's implementations. These do not receive Recursica styling treatment — they are utility wrappers for cursor-following tooltips and shared delay grouping respectively.
53
+
54
+ ---
55
+
56
+ ## 2. Token Namespace: `tooltip`
57
+
58
+ **Decision:** The CSS module exclusively uses variables from the `--recursica_ui-kit_components_tooltip_*` namespace.
59
+
60
+ **Implementation:** The Recursica token system defines the `tooltip` namespace covering:
61
+
62
+ - Geometry: border-radius, border-size, min-width, min-height, max-width, padding
63
+ - Typography: text_font-\* (family, size, style, weight, letter-spacing, line-height, text-decoration, text-transform)
64
+ - Colors (layer-aware): background, border-color, text
65
+ - Elevation: box-shadow
66
+ - Beak: beak-size (16px), beak-inset (8px)
67
+
68
+ No tokens from other component namespaces are referenced.
69
+
70
+ ---
71
+
72
+ ## 3. Hardcoded Values
73
+
74
+ ### `border-style: solid` (CSS module)
75
+
76
+ Mantine renders the tooltip using its `Box` component, which does not set `border-style` natively. Without this hardcoded value, the border-width and border-color tokens would have no visible effect. Same pattern as Menu and HoverCard dropdowns.
77
+
78
+ ### `arrowSize` defaulted to `16` (Tooltip.tsx)
79
+
80
+ Mantine's `arrowSize` prop is a JavaScript number used for inline style calculations: it sets `width`, `height`, and a positioning offset (`-arrowSize/2`) directly on the arrow `<div>` element. These inline styles cannot be overridden via CSS without `!important`, and the positioning offset has no CSS equivalent. The beak size cannot be fully CSS-driven.
81
+
82
+ The default value `16` matches the Recursica `beak-size` token (`--recursica_ui-kit_components_tooltip_properties_beak-size: 16px`). Developers can override `arrowSize` if needed. This is documented as an open issue in `docs/COMPONENT_ISSUES.md`.
83
+
84
+ **Note:** Mantine calls this the "arrow"; Recursica calls it the "beak". The Recursica prop `withBeak` (defaulting to `true`) maps to Mantine's `withArrow`. Both are accepted; `withBeak` takes precedence.
85
+
86
+ ### `multiline={true}` (Tooltip.tsx)
87
+
88
+ Mantine's `multiline` prop controls whether tooltip text wraps (`white-space: nowrap` when false). Recursica always enables multiline because the design system defines a `max-width` token (300px) — text should wrap naturally within that constraint rather than overflowing. The `multiline` prop is not exposed to developers.
89
+
90
+ ### Flexbox centering (CSS module)
91
+
92
+ `display: flex; align-items: center; justify-content: center;` is applied to the `.tooltip` class. This ensures text is vertically and horizontally centered within the `min-height: 48px` container defined by the design token. Without this, text sits at the top of the tooltip.
93
+
94
+ ---
95
+
96
+ ## 4. Recursica `withBeak` Prop
97
+
98
+ **Decision:** `withBeak` is the official Recursica prop for controlling beak visibility, defaulting to `true`.
99
+
100
+ **Implementation:** Both `withBeak` and Mantine's `withArrow` are accepted. Resolution order: `withBeak ?? withArrow`. When both are provided, `withBeak` takes precedence. The default of `true` means tooltips show the beak by default, matching the Recursica design intent.
101
+
102
+ ---
103
+
104
+ ## 5. ClassNames Binding
105
+
106
+ **Decision:** CSS module classes are bound via the `classNames` prop on Mantine's Tooltip root.
107
+
108
+ **Implementation:** The stylesNames for Tooltip are `tooltip` (the container) and `arrow` (the beak). Both are mapped to their respective CSS module classes: `{ tooltip: styles.tooltip, arrow: styles.arrow }`. Consumer-provided `classNames` are merged additively when `overStyled` is true.
109
+
110
+ ---
111
+
112
+ ## 6. Tooltip.Floating and Tooltip.Group
113
+
114
+ **Decision:** These static sub-components are direct pass-throughs to Mantine with no Recursica styling.
115
+
116
+ **Implementation:** `Tooltip.Floating` follows the cursor and uses a different rendering mechanism than standard Tooltip. `Tooltip.Group` is a utility for shared delay timing. Neither has Recursica design tokens defined, so they remain unstyled pass-throughs. If tokens are added in the future, they can be wrapped independently.
117
+
118
+ ---
119
+
120
+ ## 7. Default Position Override
121
+
122
+ **Decision:** Recursica defaults `position` to `"top"`. Mantine defaults to `"bottom"`.
123
+
124
+ **Implementation:** The `position="top"` default is set on the Mantine root element before the prop spread, so developer-provided `position` values still take precedence. This aligns with Recursica's design intent for overlay components to appear above their trigger by default.
@@ -0,0 +1,46 @@
1
+ # TransferList - Usage Guide
2
+
3
+ This document describes how to integrate and use the `TransferList` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { TransferList } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { TransferList } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <TransferList
24
+ data={[
25
+ [
26
+ { value: "1", label: "Item 1" },
27
+ { value: "2", label: "Item 2" },
28
+ ],
29
+ [{ value: "3", label: "Item 3" }],
30
+ ]}
31
+ />
32
+ );
33
+ }
34
+ ```
35
+
36
+ ---
37
+
38
+ ## 3. Design System Integration
39
+
40
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
41
+
42
+ > [!IMPORTANT]
43
+ >
44
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
45
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
46
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
@@ -0,0 +1,46 @@
1
+ # Tree - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Tree` component in your projects using `@recursica/mantine-adapter`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Tree } from "@recursica/mantine-adapter";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Tree } from "@recursica/mantine-adapter";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <Tree
24
+ data={[
25
+ {
26
+ value: "1",
27
+ label: "Root",
28
+ children: [{ value: "2", label: "Child" }],
29
+ },
30
+ ]}
31
+ />
32
+ );
33
+ }
34
+ ```
35
+
36
+ ---
37
+
38
+ ## 3. Design System Integration
39
+
40
+ All Recursica components in the `@recursica/mantine-adapter` package adhere strictly to design system spacing, scaling, and behavior patterns.
41
+
42
+ > [!IMPORTANT]
43
+ >
44
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
45
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
46
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.