├── .npmrc
├── .prettierignore
├── table.gif
├── skeleton.gif
├── static
└── favicon.png
├── src
├── lib
│ ├── index.ts
│ ├── MoveIcon.svelte
│ └── SortableItem.svelte
├── app.d.ts
├── app.html
└── routes
│ ├── +layout.svelte
│ ├── +page.svelte
│ └── table
│ └── +page.svelte
├── vite.config.ts
├── .prettierrc
├── .gitignore
├── .markdownlint.jsonc
├── tsconfig.json
├── .vscode
├── extensions.json
└── settings.json
├── eslint.config.js
├── svelte.config.js
├── package.json
└── README.md
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # Package Managers
2 | package-lock.json
3 | pnpm-lock.yaml
4 | yarn.lock
5 |
--------------------------------------------------------------------------------
/table.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/joaquimnetocel/svelte-sortable-items/HEAD/table.gif
--------------------------------------------------------------------------------
/skeleton.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/joaquimnetocel/svelte-sortable-items/HEAD/skeleton.gif
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/joaquimnetocel/svelte-sortable-items/HEAD/static/favicon.png
--------------------------------------------------------------------------------
/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | import MoveIcon from './MoveIcon.svelte';
2 | import SortableItem from './SortableItem.svelte';
3 |
4 | export { MoveIcon, SortableItem };
5 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import { defineConfig } from 'vite';
3 |
4 | export default defineConfig({
5 | plugins: [sveltekit()],
6 | });
7 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": true,
3 | "singleQuote": true,
4 | "trailingComma": "all",
5 | "printWidth": 100,
6 | "plugins": ["prettier-plugin-svelte"],
7 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
8 | }
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | # Output
4 | .output
5 | .vercel
6 | /.svelte-kit
7 | /build
8 | /dist
9 |
10 | # OS
11 | .DS_Store
12 | Thumbs.db
13 |
14 | # Env
15 | .env
16 | .env.*
17 | !.env.example
18 | !.env.test
19 |
20 | # Vite
21 | vite.config.js.timestamp-*
22 | vite.config.ts.timestamp-*
23 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | // interface Error {}
6 | // interface Locals {}
7 | // interface PageData {}
8 | // interface PageState {}
9 | // interface Platform {}
10 | }
11 | }
12 |
13 | export {};
14 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.markdownlint.jsonc:
--------------------------------------------------------------------------------
1 | {
2 | "MD033": false, // THIS RULE IS TRIGGERED WHENEVER RAW HTML IS USED IN A MARKDOWN DOCUMENT.
3 | "MD013": false, // THIS RULE IS TRIGGERED WHEN THERE ARE LINES THAT ARE LONGER THAN THE CONFIGURED LINE_LENGTH (DEFAULT: 80 CHARACTERS).
4 | "MD010": false, // THIS RULE IS TRIGGERED BY ANY LINES THAT CONTAIN HARD TAB CHARACTERS INSTEAD OF USING SPACES FOR INDENTATION.
5 | }
6 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true,
12 | "module": "NodeNext",
13 | "moduleResolution": "NodeNext"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "esbenp.prettier-vscode", // PRETTIER
4 | "svelte.svelte-vscode", // SVELTE FOR VS CODE
5 | "dbaeumer.vscode-eslint", // ESLINT
6 |
7 | "natqe.reload", // RELOAD
8 | "formulahendry.auto-rename-tag", // AUTO RENAME TAG
9 | "shd101wyy.markdown-preview-enhanced", // MARKDOWN PREVIEW ENHANCED
10 | "DavidAnson.vscode-markdownlint", // MARKDOWNLINT
11 |
12 | "MrAmericanMike.sveltesnippets", // SVELTE SNIPPETS
13 | "Chanzhaoyu.svelte-5-snippets" // SVELTE 5 SNIPPETS
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/src/routes/+layout.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
15 |
16 | {@render children()}
17 |
18 |
38 |
--------------------------------------------------------------------------------
/eslint.config.js:
--------------------------------------------------------------------------------
1 | import js from '@eslint/js';
2 | import ts from 'typescript-eslint';
3 | import svelte from 'eslint-plugin-svelte';
4 | import prettier from 'eslint-config-prettier';
5 | import globals from 'globals';
6 |
7 | /** @type {import('eslint').Linter.Config[]} */
8 | export default [
9 | js.configs.recommended,
10 | ...ts.configs.recommended,
11 | ...svelte.configs['flat/recommended'],
12 | prettier,
13 | ...svelte.configs['flat/prettier'],
14 | {
15 | languageOptions: {
16 | globals: {
17 | ...globals.browser,
18 | ...globals.node,
19 | },
20 | },
21 | },
22 | {
23 | files: ['**/*.svelte'],
24 | languageOptions: {
25 | parserOptions: {
26 | parser: ts.parser,
27 | },
28 | },
29 | },
30 | {
31 | ignores: ['build/', '.svelte-kit/', 'dist/'],
32 | },
33 | ];
34 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-auto';
2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors
7 | // for more information about preprocessors
8 | preprocess: vitePreprocess(),
9 |
10 | kit: {
11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
12 | // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters.
14 | adapter: adapter(),
15 | },
16 | // RUNES MODE CONFIG:
17 | compilerOptions: {
18 | runes: true,
19 | },
20 | /////
21 | };
22 |
23 | export default config;
24 |
--------------------------------------------------------------------------------
/src/lib/MoveIcon.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | MOVE THE ICON TO REORDER ELEMENTS.
21 |
22 | {#each stateUsers as currentUser, numberCounter (currentUser.id)}
23 |
24 |
29 |
30 |
31 | {currentUser.name}
32 |
33 |
34 |
35 | {/each}
36 |
37 | {JSON.stringify(stateUsers)}
38 |
39 |
45 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | // FORMATTING SETTINGS:
3 | "editor.defaultFormatter": "esbenp.prettier-vscode", // PRETTIER AS DEFAULT FORMATTER.
4 | "[svelte]": {
5 | "editor.defaultFormatter": "svelte.svelte-vscode" // FORMATTER FOR SVELTE FILES.
6 | },
7 | "editor.formatOnSave": true, // FORMAT A FILE ON SAVE.
8 | "editor.codeActionsOnSave": {
9 | "source.sortImports": "explicit" // SORT IMPORTS ON SAVE.
10 | },
11 | /////
12 | // LINTER AND INTELLISENSE SETTINGS:
13 | "eslint.validate": ["javascript", "svelte"], // AN ARRAY OF LANGUAGE IDS WHICH SHOULD BE VALIDATED BY ESLINT.
14 | "svelte.enable-ts-plugin": true, // 'SVELTE FOR VS CODE' TYPESCRIPT PLUGIN WHICH PROVIDES INTELLISENSE FOR SVELTE FILES INSIDE TS/JS FILES.
15 | "files.associations": {
16 | "*.json": "jsonc" // ENABLE COMMENTS IN JSON FILES.
17 | },
18 | /////
19 | // EXPLORER SIDEBAR:
20 | "explorer.sortOrder": "filesFirst", // FILES DISPLAYED BEFORE FOLDERS.
21 | "explorer.confirmDelete": false, // WON'T ASK FOR CONFIRMATION WHEN DELETING A FILE VIA THE TRASH.
22 | "explorer.compactFolders": false, // SINGLE CHILD FOLDERS WON'T BE COMPRESSED IN A COMBINED TREE ELEMENT.
23 | "workbench.tree.indent": 18, // TREE INDENTATION IN PIXELS.
24 | /////
25 | // TAB:
26 | "editor.insertSpaces": false, // VSCODE WON'T INSERT SPACES WHEN PRESSING 'TAB'.
27 | "editor.tabSize": 4, // THE NUMBER OF SPACES A TAB IS EQUAL TO.
28 | "editor.detectIndentation": false, // DISABLE 'editor.tabSize' AND 'editor.insertSpaces' AUTOMATIC DETECTION BASED ON THE FILE CONTENTS.
29 | /////
30 | // GIT:
31 | "git.autofetch": true, // COMMITS WILL AUTOMATICALLY BE FETCHED FROM THE DEFAULT REMOTE OF THE CURRENT GIT REPOSITORY.
32 | "git.enableSmartCommit": true, // COMMIT ALL CHANGES WHEN THERE ARE NO STAGED CHANGES.
33 | /////
34 | // STARTUP:
35 | "workbench.startupEditor": "none", // START WITHOUT AN EDITOR IF NONE ARE RESTORED FROM THE PREVIOUS SESSION.
36 | /////
37 | // WINDOW:
38 | "window.title": "${rootName}" // VSCODE WINDOW TITLE.
39 | /////
40 | }
41 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-sortable-items",
3 | "version": "1.0.1",
4 | "description": "svelte-sortable-items is a svelte/sveltekit package to create sortable drag-and-drop items. This package allows you to relate a javascript array to sortable HTML elements.",
5 | "repository": {
6 | "type": "git",
7 | "url": "https://github.com/joaquimnetocel/svelte-sortable-items.git"
8 | },
9 | "bugs": {
10 | "url": "https://github.com/joaquimnetocel/svelte-sortable-items/issues"
11 | },
12 | "keywords": [
13 | "drag-and-drop",
14 | "reorder",
15 | "reordering",
16 | "sortable-lists",
17 | "sortable-table",
18 | "table-sorting",
19 | "svelte",
20 | "sveltekit",
21 | "svelte5"
22 | ],
23 | "author": "Joaquim Neto ",
24 | "license": "ISC",
25 | "scripts": {
26 | "dev": "vite dev",
27 | "build": "vite build && npm run package",
28 | "preview": "vite preview",
29 | "package": "svelte-kit sync && svelte-package && publint",
30 | "prepublishOnly": "npm run package",
31 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
32 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
33 | "lint": "prettier --check . && eslint .",
34 | "format": "prettier --write ."
35 | },
36 | "exports": {
37 | ".": {
38 | "types": "./dist/index.d.ts",
39 | "svelte": "./dist/index.js"
40 | }
41 | },
42 | "files": [
43 | "dist",
44 | "!dist/**/*.test.*",
45 | "!dist/**/*.spec.*"
46 | ],
47 | "peerDependencies": {
48 | "svelte": "^5.0.0-next.1"
49 | },
50 | "devDependencies": {
51 | "@sveltejs/adapter-auto": "^3.0.0",
52 | "@sveltejs/kit": "^2.0.0",
53 | "@sveltejs/package": "^2.0.0",
54 | "@sveltejs/vite-plugin-svelte": "^4.0.0-next.6",
55 | "@types/eslint": "^9.6.0",
56 | "eslint": "^9.0.0",
57 | "eslint-config-prettier": "^9.1.0",
58 | "eslint-plugin-svelte": "^2.36.0",
59 | "globals": "^15.0.0",
60 | "prettier": "^3.1.1",
61 | "prettier-plugin-svelte": "^3.1.2",
62 | "publint": "^0.1.9",
63 | "svelte": "^5.0.0-next.1",
64 | "svelte-check": "^3.6.0",
65 | "typescript": "^5.0.0",
66 | "typescript-eslint": "^8.0.0",
67 | "vite": "^5.0.11"
68 | },
69 | "svelte": "./dist/index.js",
70 | "types": "./dist/index.d.ts",
71 | "type": "module"
72 | }
73 |
--------------------------------------------------------------------------------
/src/routes/table/+page.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
25 |
26 |
27 |
28 |
29 |
MOVE THE TABLE ROWS TO REORDER:
30 |
31 |
32 |
33 |
34 |
35 | NAME
36 | AGE
37 |
38 |
39 |
40 | {#each stateUsers as currentUser, numberCounter (currentUser.id)}
41 |
42 |
43 |
48 |
49 |
50 |
51 |
52 |
57 | {currentUser.name}
58 |
59 |
60 |
61 |
66 | {currentUser.age}
67 |
68 |
69 |
70 | {/each}
71 |
72 |
73 |
74 |
{JSON.stringify(stateUsers)}
75 |
76 |
77 |
83 |
--------------------------------------------------------------------------------
/src/lib/SortableItem.svelte:
--------------------------------------------------------------------------------
1 |
59 |
60 | functionDragStart(parEvent, propItemNumber)}
65 | ondrop={(event) => functionDrop(event, propItemNumber)}
66 | ondragover={(parEvent: DragEvent & { currentTarget: EventTarget & HTMLElement }) => {
67 | parEvent.preventDefault();
68 | return false;
69 | }}
70 | ondragenter={(parEvent: DragEvent & { currentTarget: EventTarget & HTMLElement }) => {
71 | parEvent.preventDefault();
72 | propHoveredItemNumber = propItemNumber;
73 | }}
74 | >
75 | {@render children()}
76 |
77 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # svelte-sortable-items
2 |
3 |     [](https://twitter.com/joaquimnetocel)
4 |
5 | svelte-sortable-items is a svelte/sveltekit package to create sortable drag-and-drop items. This package allows you to relate a javascript array to sortable HTML elements.
6 |
7 |
8 |
9 |
10 |
11 |
12 | ## VERSIONS
13 |
14 | - VERSION 1.0.0 OR ABOVE WORKS WITH SVELTE 5 ONLY (NEWER AND RECOMMENDED VERSIONS WITH IMPROVEMENTS!)
15 | - PREVIOUS VERSIONS WORKS WITH SVELTE 3, 4 AND 5.
16 |
17 | ## WHY ANOTHER SVELTE PACKAGE FOR SORTING?
18 |
19 | **svelte-sorting-items** differs from other svelte sorting packages by not committing to a specific html structure (like "ul/li" lists). Furthermore, it promotes sorting from the child elements only, instead of sorting the children of a parent element. This allows a non-opinionated structure/styling and, consequently, the ordering of more flexible structures, such as the lines of a table for example.
20 |
21 | ## FEATURES
22 |
23 | - NON-OPINIONATED STYLING.
24 | - NON-OPINIONATED HTML STRUCTURE.
25 | - WORKS ON MOBILE. YOU JUST HAVE TO LOAD [svelte-drag-drop-touch](https://github.com/rozek/svelte-drag-drop-touch)
26 | - TYPESCRIPT SUPPORT.
27 |
28 | ## DEMOS
29 |
30 | - [REPL: BOOTSTRAP 5 TABLE EXAMPLE](https://svelte-5-preview.vercel.app/#H4sIAAAAAAAACu1VXW_bNhT9K5w2IAlgiU0dd5siGXNirXUaW4vtpRiqPtASLbGRSIKknDmC_vtAfUXW1pc9DnsxzHsPz-U95D0qjD1JsTTsz4VBUYYN25hxbowMdeR6IQ84VdgYGZLlItQRR4aCcAVSRGM3MJQMjGlAA0UyzoQCBViyA16EjI7AhgmFdileKJyBEuwFy8BZzWjKJmcShTN5dn1CsU8JH2yAiJIMKVwhaaBSrIBUSOHfJRYSuOCHanX-WScDVQAS2eByBHRTNji7Ywk9GwEUYxtcTUA56sPedrAlEk8tbDwewMY9Nopki5u8G-Cu-nTHFvZjC_tycX3SwAd2wAJHlUhdG-alRjmwFlsLTJ1aCDvBKKoUd74zTbCcffTAYgs--euPwF-BpX-zuPfA3Htc3HobYJo1tLk0KUI3MBKluLQhzCl_iq2QZbC5lEig2IwE46ZieZgExrR_gqpgS6hr3_j-drNdz37ryqSEPtVSJALve6XCiFpfZYRTchAWxQpSnsEdY0oqgfgvE-uN9RZGRCoYSvmasDJCrVDKwKhZBU7dwJDqmGKZYKzaOKEKx4Koo84maPzTlek9brYPqzFEL1y8v5zRbPwwj_nd_SL7eYXYmz9eLl9U-LB9_lXyaHycv5s8siTheX7rZ_ezzdfbljoUTEomSEyoGxiIMnrMWN6cCJ7q4sDBHVEnIgcQpkhKNzD4n-ZVMy06Pl36jx7YfvDAdnZz74G1_2kDtj5Ye_567q1tB2pQ_dydalg6pnpVD5BUgnAcgWcT5Yo1_HpH91Dqpej-V8mpA1UyCK1mS-8fwrP3p1EHdmQ6_lrGUTsWHTtc8T1GYdIfUyRBmAuBqdLrEaB5tsPiluVUYQHOezmLRBdl_xgCNA5gV-5QKWFXv80AucXfx8l1T0uUvc40aXSyDpTTt6zTVKB2hEY2F4zPkUJNtaqtcojUIM2wqmq7xekZvsnbO3q7c9jSYPN0yOW07gs04Ya8YLe4nJQADhuF_U5PVYEDWf6DMhX9l6bNuvxfnm_Jg-J_r07PKQJVQG0HZWccnVc4sCJrrY5Pi7uNv7K0sdGY7I_nryJdlA7kldO23uhUX4OKx-rbASjqQjsUPsWC5TQyQ5YyYYOUxInapTm-bhy-Dj8nRNWhsnLyhtYYGRmLyJ7gyLCVyHH5pfwLBn1atDYJAAA=)
31 | - [REPL: BASIC EXAMPLE](https://svelte-5-preview.vercel.app/#H4sIAAAAAAAACnWSW2-bQBCF_8p0W8m2BEa5tRIBpDRBipPYSLabPoQ8rGGNV4FdtDu4chH_veKWYEd9Qdqdbw8z50xJtjxlmtgvJRE0Y8QmN3lODIKHvD7oPUuREYNoWaiovnF0pHiOkFKRuCFBHRIvFCHyLJcKoYS53LNZJIUBK6mQblI2Q5ZBBVslMxi1iqbuaiZHlunR9ZHENuX5yQOLCp5RZA0pQkwZgkaK7JdmSoML35rT-KUuhlgCj204M6AeyobRg9yJkQE0YTZcXkFlDLHzd2xO1VuPXVycYBcDNUF1z119P-Euh3KHHvvRY6-T66MB7uWeKRY3JvVjOKLINkx5Y_Osph2rNb02WjitIfaO0bhx3vlimjC_efRhtobfwfIRggXMg5-zJx_u_OfZrb8C02zRLjytIjckO8Rc25ZViPwtmUYys7pwYkUTM1YyN1EW0S4k3rCD5oeNoGOd9CKc3JsHzz6s731w-k2AXMl8xf8ytzw7r8DyYHYbLGAdwNIPlnf-Evwnf-4v1qupY-WNTvmV0Wg3TJhqiAqlmMD6bEDr0K0sBDIF40FtyuNJ1fQZ8z10e2PXO-W1MTnDxWyvQqx7rM-LRtctj_SrntpwEds1ekeRuuVHf5-JQa695mne3SOvf9s0HKVUa7v5dujnh-C67rED1btIiP83_oMph4bV6_o-gGPFfN87ZQ2tasPvyqVVJ1R1oZcPq2Ax1ai4SPj2MP4wZlL1mToaDylrRKbD8aBsf7ah0VuiZCFiM5KpVDakPNnhJi3YdUt01392HNurqtnBTpYYJJMx33IWExtVwarX6h-goru64AQAAA==)
32 |
33 | ## INSTALLATION
34 |
35 | ```bash
36 | npm install svelte-sortable-items
37 | ```
38 |
39 | ## BASIC EXAMPLE
40 |
41 | ```svelte
42 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | MOVE THE ICON TO REORDER ELEMENTS.
62 |
63 | {#each stateUsers as currentUser, numberCounter (currentUser.id)}
64 |
65 |
70 |
71 |
72 | {currentUser.name}
73 |
74 |
75 |
76 | {/each}
77 |
78 | {JSON.stringify(stateUsers)}
79 |
80 |
86 | ```
87 |
88 | ## MORE EXAMPLES
89 |
90 | To run the examples from `/src/routes`:
91 |
92 | ```bash
93 | git clone https://github.com/joaquimnetocel/svelte-sortable-items.git
94 | cd svelte-sortable-items
95 | npm install
96 | npm run dev
97 | ```
98 |
99 | ## COMPONENT STRUCTURE
100 |
101 | - `SortableItem`: A component to create sortable html elements.
102 | - `MoveIcon`: An icon commonly used to sort items.
103 |
104 | ## PROPS
105 |
106 | - PROPS OF `SortableItem`:
107 |
108 | | PROP | DESCRIPTION | TYPE | REQUIRED | DEFAULT |
109 | | ---------------------------------- | ----------------------------------------------------------------------------- | ----------- | -------- | ----------- |
110 | | `propData` (bindable) | AN ARRAY WITH THE DATA. | `unknown[]` | YES | - |
111 | | `propItemNumber` | THE INITIAL POSITION OF THE ITEM. | `number` | YES | `undefined` |
112 | | `propHoveredItemNumber` (bindable) | THE HOVERED ITEM NUMBER (GENERALY USED TO DO SPECIFIC STYLING WHEN HOVERING). | `number` | NO | `-1` |
113 | | `propIsImageHidden` | MAKE THE GHOST IMAGE WHEN DRAGGING TRANSPARENT | `boolean` | NO | `false` |
114 |
115 | - PROPS OF `MoveIcon`:
116 |
117 | | PROP | DESCRIPTION | TYPE | REQUIRED | DEFAULT |
118 | | ---------- | --------------------- | -------- | -------- | ------- |
119 | | `propSize` | SIZE OF THE SORT ICON | `number` | NO | 12 |
120 |
--------------------------------------------------------------------------------