Skip to content

Commit 6ba6e5b

Browse files
committed
Update examples
1 parent 4721603 commit 6ba6e5b

File tree

6 files changed

+237
-88
lines changed

6 files changed

+237
-88
lines changed

apps/docs/quickstart.mdx

+158-64
Original file line numberDiff line numberDiff line change
@@ -7,92 +7,186 @@ icon: 'rocket'
77
import Intro from '/snippets/quickstart/intro.mdx';
88
import {Story} from '/snippets/story.mdx';
99

10+
import {CodeSandbox} from '/snippets/sandbox.mdx';
11+
import {draggableStyles, droppableStyles} from '/snippets/code.mdx';
12+
1013
<Intro />
1114

1215
## Installation
13-
Before getting started, make sure you install `@dnd-kit/dom` in your project.
16+
17+
Install `@dnd-kit/dom` in your project:
1418

1519
<CodeGroup>
16-
```plain npm
20+
```bash npm
1721
npm install @dnd-kit/dom
1822
```
1923

20-
```plain yarn
21-
yarn install @dnd-kit/dom
24+
```bash yarn
25+
yarn add @dnd-kit/dom
2226
```
2327

24-
```plain pnpm
25-
pnpm install @dnd-kit/dom
28+
```bash pnpm
29+
pnpm add @dnd-kit/dom
2630
```
2731

28-
```plain bun
29-
bun install @dnd-kit/dom
32+
```bash bun
33+
bun add @dnd-kit/dom
3034
```
3135
</CodeGroup>
3236

33-
## Creating a draggable element
37+
## Creating draggable elements
3438

3539
Let's get started by creating draggable elements that can be dropped over droppable targets.
3640

37-
In this example, we'll be using the Draggable class to create a draggable element. The Draggable class requires an element and an id as arguments.
38-
We'll also need to create a DragDropManager instance to manage the drag and drop interactions.
39-
40-
```tsx
41-
import {DragDropManager, Draggable} from '@dnd-kit/dom';
42-
43-
const manager = new DragDropManager();
44-
const element = document.createElement('button');
45-
const draggable = new Draggable({
46-
element,
47-
id: 'draggable',
48-
}, manager);
49-
50-
document.body.appendChild(element);
51-
```
52-
53-
<Story id="vanilla-draggable--example" />
54-
55-
## Creating droppable elements
56-
57-
In order for our draggable elements to have targets where they can be dropped, we need to create droppable elements. To do so, we’ll be using the useDroppable hook.
58-
59-
Like the useDraggable hook, the useDroppable hook requires a unique id, and returns a ref that you can attach to any element to make it droppable.
60-
61-
This time, we'll accept the id argument as a prop of the Droppable component.
62-
63-
```tsx
64-
import {Droppable} from '@dnd-kit/dom';
65-
66-
const element = document.createElement('div');
67-
const droppable = new Droppable({
68-
element,
69-
id: 'droppable',
70-
}, manager);
71-
72-
element.setAttribute('style', 'width: 300px; height: 300px; background: #FEFEFE;');
73-
74-
document.body.appendChild(element);
75-
```
41+
In this example, we'll be using the [Draggable](/concepts/draggable) class to create a draggable element. We'll also need to create a [DragDropManager](/concepts/drag-drop-manager) instance to manage the drag and drop interactions.
7642

77-
## Putting all the pieces together
43+
export const draggableCode = `
44+
function createDraggable(manager) {
45+
// Create a DOM element (or use an existing one)
46+
const element = document.createElement('button');
47+
element.innerText = 'draggable';
48+
element.classList.add('btn');
49+
50+
// Make the element draggable
51+
return new Draggable({id: 'draggable-button', element}, manager);
52+
}
53+
`.trim();
54+
55+
export const draggableExample = `
56+
import {Draggable, DragDropManager} from '@dnd-kit/dom';
57+
58+
${draggableCode}
59+
60+
export default function App() {
61+
// Create a manager to coordinate drag and drop
62+
const manager = new DragDropManager();
63+
64+
// Create a draggable element
65+
const draggable = createDraggable(manager);
66+
67+
// Add the draggable element to the DOM
68+
document.body.append(draggable.element);
69+
}
70+
`.trim();
71+
72+
<CodeSandbox files={{
73+
'index.js': {code: `import './styles.css';\nimport App from './app.js';\n\nApp();`, hidden: true},
74+
'app.js': {code: draggableExample, active: true},
75+
'styles.css': {code: draggableStyles, hidden: true},
76+
}} height={475} previewHeight={200} template="vanilla" />
77+
78+
<ParamField path="options" type="object" required>
79+
Configuration for the draggable element:
80+
- `id` (required): Unique identifier
81+
- `element`: The DOM element to make draggable
82+
- `handle`: Optional drag handle element
83+
- `disabled`: Whether dragging is disabled
84+
</ParamField>
85+
86+
## Creating droppable targets
87+
88+
In order for our draggable elements to have targets where they can be dropped, we need to create droppable elements. To do so, we'll be using the Droppable class.
89+
90+
Like the [Draggable](/concepts/draggable) class, the [Droppable](/concepts/droppable) class requires an element and an id as arguments.
91+
92+
export const droppableCode = `
93+
import {Droppable, DragDropManager} from '@dnd-kit/dom';
94+
95+
export function createDroppable(manager) {
96+
const element = document.createElement('div');
97+
element.classList.add('droppable');
98+
99+
const droppable = new Droppable({
100+
element,
101+
id: 'droppable-container', // Required - must be unique
102+
effects(){
103+
return [
104+
() => droppable.isDropTarget
105+
? element.classList.add('active')
106+
: element.classList.remove('active')
107+
];
108+
}
109+
}, manager);
110+
111+
return droppable;
112+
}
113+
`.trim();
114+
115+
export const appCode = `
116+
import {DragDropManager} from '@dnd-kit/dom';
117+
118+
import {createDraggable} from './Draggable.js';
119+
import {createDroppable} from './Droppable.js';
120+
121+
export default function App() {
122+
const manager = new DragDropManager();
123+
const app = document.getElementById('app');
124+
125+
const draggable = createDraggable(manager);
126+
const droppable = createDroppable(manager);
127+
128+
app.append(draggable.element, droppable.element);
129+
}
130+
`.trim();
131+
132+
<CodeSandbox files={{
133+
'index.js': {code: `import './styles.css';\nimport App from './App.js';\n\nApp();`, hidden: true},
134+
'App.js': {code: appCode},
135+
'Droppable.js': {code: droppableCode, active: true},
136+
'Draggable.js': {code: `import {Draggable} from '@dnd-kit/dom';\n\nexport ${draggableCode}`},
137+
'styles.css': {code: `${draggableStyles}\n${droppableStyles}`, hidden: true},
138+
}} height={480} previewHeight={420} template="vanilla" showTabs />
139+
140+
141+
<ParamField path="options" type="object" required>
142+
Configuration for the droppable target:
143+
- `id` (required): Unique identifier
144+
- `element`: The DOM element to make droppable
145+
- `accepts`: Types of draggable elements to accept
146+
- `disabled`: Whether dropping is disabled
147+
</ParamField>
78148

79149
In order to move the draggable element into the droppable target, we need to monitor the drag and drop events and update the DOM accordingly.
80150

81-
```tsx
82-
manager.monitor.addEventListener('dragend', (event) => {
83-
if (event.canceled) {
84-
return;
85-
}
86-
87-
if (event.operation.target?.id === 'droppable') {
88-
droppableElement.appendChild(draggableElement);
89-
} else {
90-
document.body.prependChild(draggableElement);
91-
}
92-
});
93-
```
94-
95-
<Story id="vanilla-droppable--example" height="360" />
151+
export const finalAppCode = `
152+
import {DragDropManager} from '@dnd-kit/dom';
153+
154+
import {createDraggable} from './Draggable.js';
155+
import {createDroppable} from './Droppable.js';
156+
157+
export default function App() {
158+
const manager = new DragDropManager();
159+
const app = document.getElementById('app');
160+
161+
const draggable = createDraggable(manager);
162+
const droppable = createDroppable(manager);
163+
164+
manager.monitor.addEventListener('dragend', (event) => {
165+
const {operation, canceled} = event;
166+
const {source, target} = operation;
167+
168+
// Skip if drag operation was canceled (e.g. if escape key was pressed)
169+
if (canceled) return;
170+
171+
// Move element to drop target if dropped on droppable
172+
if (target && target.id === droppable.id) {
173+
droppable.element.append(source.element);
174+
} else {
175+
app.prepend(source.element);
176+
}
177+
});
178+
179+
app.append(draggable.element, droppable.element);
180+
}
181+
`.trim();
182+
183+
<CodeSandbox files={{
184+
'index.js': {code: `import './styles.css';\nimport App from './App.js';\n\nApp();`, hidden: true},
185+
'App.js': {code: finalAppCode, active: true},
186+
'Droppable.js': {code: droppableCode},
187+
'Draggable.js': {code: `import {Draggable} from '@dnd-kit/dom';\n\nexport ${draggableCode}`},
188+
'styles.css': {code: `${draggableStyles}\n${droppableStyles}`, hidden: true},
189+
}} height={660} previewHeight={420} template="vanilla" showTabs />
96190

97191
## Next steps
98192

apps/docs/snippets/code.mdx

+66
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ body {
77
88
.btn {
99
display: flex;
10+
width: min-content;
11+
height: min-content;
1012
align-items: center;
1113
gap: 6px;
1214
font-size: 20px;
@@ -36,6 +38,70 @@ body {
3638
}
3739
`.trim()
3840

41+
export const droppableStyles = `
42+
#app {
43+
display: grid;
44+
grid-template-columns: 2fr 1fr;
45+
grid-gap: 20px;
46+
align-items: center;
47+
max-width: 700px;
48+
margin: 0 auto;
49+
}
50+
51+
.droppable {
52+
display: flex;
53+
grid-column: 2;
54+
flex-direction: column;
55+
gap: 20px;
56+
align-items: center;
57+
justify-content: flex-start;
58+
position: relative;
59+
padding-top: 80px;
60+
text-align: center;
61+
border-radius: 10px;
62+
max-width: 340px;
63+
max-height: 340px;
64+
flex-grow: 1;
65+
min-width: 300px;
66+
aspect-ratio: 1 / 1;
67+
box-sizing: border-box;
68+
background-color: #fff;
69+
box-shadow: inset rgba(201, 211, 219, 0.5) 0 0 0 2px,
70+
rgba(255, 255, 255, 0) 0 0 0 1px, rgba(201, 211, 219, 0.25) 20px 14px 24px;
71+
transition: box-shadow 250ms ease;
72+
}
73+
74+
.droppable::after {
75+
content: url("data:image/svg+xml,%3Csvg width='200' viewBox='0 0 279 67' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 0H55C61.6274 0 67 5.37258 67 12V55C67 61.6274 61.6274 67 55 67H12C5.37258 67 0 61.6274 0 55V12C0 5.37258 5.37258 0 12 0Z' fill='%237F8C96'/%3E%3Cpath transform-origin='35 35' d='M19.8652 44.5547L12.494 52.1379V44.6787H8.33374V59.2396H22.8946V55.0794H15.4354L22.9863 47.5285L19.8652 44.5547Z' fill='white'%3E%3Canimate attributeName='fill-opacity' begin='0' values='0;1;1;0' keyTimes='0; 0.2; 0.85; 1' dur='3s' repeatCount='indefinite'/%3E%3CanimateTransform attributeName='transform' type='scale' values='0 0; 1 1; 1 1; 1 1' keyTimes='0; 0.15; 0.9; 1' begin='0s' dur='3s' repeatCount='indefinite' /%3E%3C/path%3E%3Cpath transform-origin='35 35' d='M47.7082 44.5547L44.5872 47.5285L52.1381 55.0794H44.6789V59.2396H59.2397V44.6787H55.0795V52.1379L47.7082 44.5547Z' fill='white'%3E%3Canimate attributeName='fill-opacity' begin='0' values='0;1;1;0' keyTimes='0; 0.2; 0.85; 1' dur='3s' repeatCount='indefinite'/%3E%3CanimateTransform attributeName='transform' type='scale' values='0 0; 1 1; 1 1; 1 1' keyTimes='0; 0.15; 0.9; 1' begin='0s' dur='3s' repeatCount='indefinite' /%3E%3C/path%3E%3Cpath transform-origin='35 35' d='M19.8652 22.9862L22.9863 20.0124L15.4354 12.4615H22.8946V8.30127H8.33374V22.8621H12.494V15.403L19.8652 22.9862Z' fill='white'%3E%3Canimate attributeName='fill-opacity' begin='0' values='0;1;1;0' keyTimes='0; 0.2; 0.85; 1' dur='3s' repeatCount='indefinite'/%3E%3CanimateTransform attributeName='transform' type='scale' values='0 0; 1 1; 1 1; 1 1' keyTimes='0; 0.15; 0.9; 1' begin='0s' dur='3s' repeatCount='indefinite' /%3E%3C/path%3E%3Cpath transform-origin='35 35' d='M47.7082 22.9862L55.0795 15.403V22.8621H59.2397V8.30127H44.6789V12.4615H52.1381L44.5872 20.0124L47.7082 22.9862Z' fill='white'%3E%3Canimate attributeName='fill-opacity' begin='0' values='0;1;1;0' keyTimes='0; 0.2; 0.85; 1' dur='3s' repeatCount='indefinite'/%3E%3CanimateTransform attributeName='transform' type='scale' values='0 0; 1 1; 1 1; 1 1' keyTimes='0; 0.15; 0.9; 1' begin='0s' dur='3s' repeatCount='indefinite' /%3E%3C/path%3E%3Cpath d='M277.629 33.6321C277.629 34.2081 277.593 34.8081 277.521 35.4321H263.589C263.685 36.6801 264.081 37.6401 264.777 38.3121C265.497 38.9601 266.373 39.2841 267.405 39.2841C268.941 39.2841 270.009 38.6361 270.609 37.3401H277.161C276.825 38.6601 276.213 39.8481 275.325 40.9041C274.461 41.9601 273.369 42.7881 272.049 43.3881C270.729 43.9881 269.253 44.2881 267.621 44.2881C265.653 44.2881 263.901 43.8681 262.365 43.0281C260.829 42.1881 259.629 40.9881 258.765 39.4281C257.901 37.8681 257.469 36.0441 257.469 33.9561C257.469 31.8681 257.889 30.0441 258.729 28.4841C259.593 26.9241 260.793 25.7241 262.329 24.8841C263.865 24.0441 265.629 23.6241 267.621 23.6241C269.565 23.6241 271.293 24.0321 272.805 24.8481C274.317 25.6641 275.493 26.8281 276.333 28.3401C277.197 29.8521 277.629 31.6161 277.629 33.6321ZM271.329 32.0121C271.329 30.9561 270.969 30.1161 270.249 29.4921C269.529 28.8681 268.629 28.5561 267.549 28.5561C266.517 28.5561 265.641 28.8561 264.921 29.4561C264.225 30.0561 263.793 30.9081 263.625 32.0121H271.329Z' fill='%237F8C96'/%3E%3Cpath d='M254.232 16.3601V44.0001H248.076V16.3601H254.232Z' fill='%237F8C96'/%3E%3Cpath d='M229.798 26.7561C230.374 25.8201 231.202 25.0641 232.282 24.4881C233.362 23.9121 234.598 23.6241 235.99 23.6241C237.646 23.6241 239.146 24.0441 240.49 24.8841C241.834 25.7241 242.89 26.9241 243.658 28.4841C244.45 30.0441 244.846 31.8561 244.846 33.9201C244.846 35.9841 244.45 37.8081 243.658 39.3921C242.89 40.9521 241.834 42.1641 240.49 43.0281C239.146 43.8681 237.646 44.2881 235.99 44.2881C234.574 44.2881 233.338 44.0121 232.282 43.4601C231.226 42.8841 230.398 42.1281 229.798 41.1921V44.0001H223.642V16.3601H229.798V26.7561ZM238.582 33.9201C238.582 32.3841 238.15 31.1841 237.286 30.3201C236.446 29.4321 235.402 28.9881 234.154 28.9881C232.93 28.9881 231.886 29.4321 231.022 30.3201C230.182 31.2081 229.762 32.4201 229.762 33.9561C229.762 35.4921 230.182 36.7041 231.022 37.5921C231.886 38.4801 232.93 38.9241 234.154 38.9241C235.378 38.9241 236.422 38.4801 237.286 37.5921C238.15 36.6801 238.582 35.4561 238.582 33.9201Z' fill='%237F8C96'/%3E%3Cpath d='M197.985 33.9201C197.985 31.8561 198.369 30.0441 199.137 28.4841C199.929 26.9241 200.997 25.7241 202.341 24.8841C203.685 24.0441 205.185 23.6241 206.841 23.6241C208.257 23.6241 209.493 23.9121 210.549 24.4881C211.629 25.0641 212.457 25.8201 213.033 26.7561V23.9121H219.189V44.0001H213.033V41.1561C212.433 42.0921 211.593 42.8481 210.513 43.4241C209.457 44.0001 208.221 44.2881 206.805 44.2881C205.173 44.2881 203.685 43.8681 202.341 43.0281C200.997 42.1641 199.929 40.9521 199.137 39.3921C198.369 37.8081 197.985 35.9841 197.985 33.9201ZM213.033 33.9561C213.033 32.4201 212.601 31.2081 211.737 30.3201C210.897 29.4321 209.865 28.9881 208.641 28.9881C207.417 28.9881 206.373 29.4321 205.509 30.3201C204.669 31.1841 204.249 32.3841 204.249 33.9201C204.249 35.4561 204.669 36.6801 205.509 37.5921C206.373 38.4801 207.417 38.9241 208.641 38.9241C209.865 38.9241 210.897 38.4801 211.737 37.5921C212.601 36.7041 213.033 35.4921 213.033 33.9561Z' fill='%237F8C96'/%3E%3Cpath d='M180.931 26.7561C181.531 25.8201 182.359 25.0641 183.415 24.4881C184.471 23.9121 185.707 23.6241 187.123 23.6241C188.779 23.6241 190.279 24.0441 191.623 24.8841C192.967 25.7241 194.023 26.9241 194.791 28.4841C195.583 30.0441 195.979 31.8561 195.979 33.9201C195.979 35.9841 195.583 37.8081 194.791 39.3921C194.023 40.9521 192.967 42.1641 191.623 43.0281C190.279 43.8681 188.779 44.2881 187.123 44.2881C185.731 44.2881 184.495 44.0001 183.415 43.4241C182.359 42.8481 181.531 42.1041 180.931 41.1921V53.5761H174.775V23.9121H180.931V26.7561ZM189.715 33.9201C189.715 32.3841 189.283 31.1841 188.419 30.3201C187.579 29.4321 186.535 28.9881 185.287 28.9881C184.063 28.9881 183.019 29.4321 182.155 30.3201C181.315 31.2081 180.895 32.4201 180.895 33.9561C180.895 35.4921 181.315 36.7041 182.155 37.5921C183.019 38.4801 184.063 38.9241 185.287 38.9241C186.511 38.9241 187.555 38.4801 188.419 37.5921C189.283 36.6801 189.715 35.4561 189.715 33.9201Z' fill='%237F8C96'/%3E%3Cpath d='M156.497 26.7561C157.097 25.8201 157.925 25.0641 158.981 24.4881C160.037 23.9121 161.273 23.6241 162.689 23.6241C164.345 23.6241 165.845 24.0441 167.189 24.8841C168.533 25.7241 169.589 26.9241 170.357 28.4841C171.149 30.0441 171.545 31.8561 171.545 33.9201C171.545 35.9841 171.149 37.8081 170.357 39.3921C169.589 40.9521 168.533 42.1641 167.189 43.0281C165.845 43.8681 164.345 44.2881 162.689 44.2881C161.297 44.2881 160.061 44.0001 158.981 43.4241C157.925 42.8481 157.097 42.1041 156.497 41.1921V53.5761H150.341V23.9121H156.497V26.7561ZM165.281 33.9201C165.281 32.3841 164.849 31.1841 163.985 30.3201C163.145 29.4321 162.101 28.9881 160.853 28.9881C159.629 28.9881 158.585 29.4321 157.721 30.3201C156.881 31.2081 156.461 32.4201 156.461 33.9561C156.461 35.4921 156.881 36.7041 157.721 37.5921C158.585 38.4801 159.629 38.9241 160.853 38.9241C162.077 38.9241 163.121 38.4801 163.985 37.5921C164.849 36.6801 165.281 35.4561 165.281 33.9201Z' fill='%237F8C96'/%3E%3Cpath d='M136.564 44.2881C134.596 44.2881 132.82 43.8681 131.236 43.0281C129.676 42.1881 128.44 40.9881 127.528 39.4281C126.64 37.8681 126.196 36.0441 126.196 33.9561C126.196 31.8921 126.652 30.0801 127.564 28.5201C128.476 26.9361 129.724 25.7241 131.308 24.8841C132.892 24.0441 134.668 23.6241 136.636 23.6241C138.604 23.6241 140.38 24.0441 141.964 24.8841C143.548 25.7241 144.796 26.9361 145.708 28.5201C146.62 30.0801 147.076 31.8921 147.076 33.9561C147.076 36.0201 146.608 37.8441 145.672 39.4281C144.76 40.9881 143.5 42.1881 141.892 43.0281C140.308 43.8681 138.532 44.2881 136.564 44.2881ZM136.564 38.9601C137.74 38.9601 138.736 38.5281 139.552 37.6641C140.392 36.8001 140.812 35.5641 140.812 33.9561C140.812 32.3481 140.404 31.1121 139.588 30.2481C138.796 29.3841 137.812 28.9521 136.636 28.9521C135.436 28.9521 134.44 29.3841 133.648 30.2481C132.856 31.0881 132.46 32.3241 132.46 33.9561C132.46 35.5641 132.844 36.8001 133.612 37.6641C134.404 38.5281 135.388 38.9601 136.564 38.9601Z' fill='%237F8C96'/%3E%3Cpath d='M118.177 27.2601C118.897 26.1561 119.797 25.2921 120.877 24.6681C121.957 24.0201 123.157 23.6961 124.477 23.6961V30.2121H122.785C121.249 30.2121 120.097 30.5481 119.329 31.2201C118.561 31.8681 118.177 33.0201 118.177 34.6761V44.0001H112.021V23.9121H118.177V27.2601Z' fill='%237F8C96'/%3E%3Cpath d='M86.3635 33.9201C86.3635 31.8561 86.7475 30.0441 87.5155 28.4841C88.3075 26.9241 89.3755 25.7241 90.7195 24.8841C92.0635 24.0441 93.5635 23.6241 95.2195 23.6241C96.5395 23.6241 97.7395 23.9001 98.8195 24.4521C99.9235 25.0041 100.788 25.7481 101.412 26.6841V16.3601H107.568V44.0001H101.412V41.1201C100.836 42.0801 100.008 42.8481 98.9275 43.4241C97.8715 44.0001 96.6355 44.2881 95.2195 44.2881C93.5635 44.2881 92.0635 43.8681 90.7195 43.0281C89.3755 42.1641 88.3075 40.9521 87.5155 39.3921C86.7475 37.8081 86.3635 35.9841 86.3635 33.9201ZM101.412 33.9561C101.412 32.4201 100.98 31.2081 100.116 30.3201C99.2755 29.4321 98.2435 28.9881 97.0195 28.9881C95.7955 28.9881 94.7515 29.4321 93.8875 30.3201C93.0475 31.1841 92.6275 32.3841 92.6275 33.9201C92.6275 35.4561 93.0475 36.6801 93.8875 37.5921C94.7515 38.4801 95.7955 38.9241 97.0195 38.9241C98.2435 38.9241 99.2755 38.4801 100.116 37.5921C100.98 36.7041 101.412 35.4921 101.412 33.9561Z' fill='%237F8C96'/%3E%3C/svg%3E%0A");
76+
position: absolute;
77+
left: 50%;
78+
top: 50%;
79+
transform: translate3d(-50%, -50%, 0);
80+
opacity: 0.3;
81+
transition: opacity 300ms ease, transform 200ms ease;
82+
user-select: none;
83+
pointer-events: none;
84+
}
85+
86+
.droppable.active {
87+
background-color: #1eb99d05;
88+
box-shadow: inset #1eb99d 0 0 0 2px, rgba(201, 211, 219, 0.5) 20px 14px 24px;
89+
}
90+
91+
.droppable.active:not(:empty) {
92+
box-shadow: inset #1eb99d 0 0 0 2px, rgba(0, 0, 0, 0.1) 20px 14px 24px;
93+
}
94+
95+
.droppable.active::after {
96+
opacity: 0.5;
97+
}
98+
99+
.droppable:not(:empty)::after {
100+
opacity: 0.2;
101+
transform: translate3d(-50%, 100%, 0) scale(0.8);
102+
}
103+
`.trim();
104+
39105
export const sortableStyles = `
40106
body {
41107
padding: 1em;

0 commit comments

Comments
 (0)