Skip to content

Commit faec643

Browse files
wip - add selectto marquee
1 parent 24a634b commit faec643

7 files changed

Lines changed: 189 additions & 3 deletions

File tree

editor-packages/editor-dashboard/components/dashboard-item-card-folder.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export const FolderCard = React.forwardRef(function (
4747
return (
4848
<DashboardItemCard
4949
ref={ref}
50+
id={props.id}
5051
{...props}
5152
label={name}
5253
icon={<SquareIcon color="white" />}

editor-packages/editor-dashboard/components/dashboard-item-card-scene.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import React, { useRef } from "react";
2-
import type { ReflectSceneNode } from "@design-sdk/figma-node";
32
import { FigmaNodeBitmapView } from "@code-editor/canvas-renderer-bitmap";
43
import { SceneNodeIcon } from "@code-editor/node-icons";
54
import { useInViewport } from "react-in-viewport";
@@ -76,6 +75,7 @@ export const SceneCard = React.forwardRef(function (
7675
return (
7776
<DashboardItemCard
7877
ref={ref}
78+
id={props.id}
7979
{...props}
8080
label={scene.name}
8181
icon={<SceneNodeIcon type={scene.type} color="white" />}

editor-packages/editor-dashboard/components/dashboard-item-card.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@ import React from "react";
22
import styled from "@emotion/styled";
33
import Highlighter from "react-highlight-words";
44

5+
const DASHBOARD_ITEM_CARD_CLASSNAME = "dashboard-item-card";
6+
export const DASHBOARD_ITEM_CARD_SELECTOR = "." + DASHBOARD_ITEM_CARD_CLASSNAME;
7+
export const DASHBOARD_ITEM_PATH_ATTRIBUTE = "data-path";
8+
59
export interface DashboardItemCardProps {
10+
id?: string;
11+
path: string;
612
selected?: boolean;
713
onClick?: (e) => void;
814
onDoubleClick?: () => void;
@@ -19,8 +25,10 @@ export interface DashboardItemCardProps {
1925

2026
export const DashboardItemCard = React.forwardRef(function (
2127
{
28+
id,
2229
onClick,
2330
onDoubleClick,
31+
path,
2432
selected,
2533
isOver,
2634
style = {},
@@ -31,9 +39,17 @@ export const DashboardItemCard = React.forwardRef(function (
3139
}: DashboardItemCardProps,
3240
ref: React.Ref<HTMLDivElement>
3341
) {
42+
const _p = {
43+
// the data-path works as a unique identifier of the item for drag selection ev listeners
44+
id: id,
45+
className: DASHBOARD_ITEM_CARD_CLASSNAME,
46+
[DASHBOARD_ITEM_PATH_ATTRIBUTE]: path,
47+
};
48+
3449
return (
3550
<Card
3651
ref={ref}
52+
{..._p}
3753
onClick={onClick}
3854
onDoubleClick={onDoubleClick}
3955
data-selected={selected}

editor-packages/editor-dashboard/core/provider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export function useDashboard() {
7474
const [state, dispatch] = useDashboardState();
7575

7676
const selectNode = useCallback(
77-
(node: string) => {
77+
(node: string | string[]) => {
7878
editordispatch({
7979
type: "select-node",
8080
node,

editor-packages/editor-dashboard/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"react-dnd": "16.0.1"
1515
},
1616
"dependencies": {
17-
"@radix-ui/react-collapsible": "^1.0.1"
17+
"@radix-ui/react-collapsible": "^1.0.1",
18+
"react-selecto": "^1.20.2"
1819
}
1920
}

editor-packages/editor-dashboard/scaffold/editor-dashboard.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import {
66
SectionHeaderAction,
77
SectionHeader,
88
DashboardItemCardProps,
9+
DASHBOARD_ITEM_CARD_SELECTOR,
10+
DASHBOARD_ITEM_PATH_ATTRIBUTE,
911
} from "../components";
1012
import { EditorHomeHeader } from "./editor-dashboard-header";
1113
import { DndProvider, useDrag, useDrop } from "react-dnd";
@@ -21,6 +23,7 @@ import {
2123
DashboardFolderItem,
2224
SceneItem,
2325
} from "../core";
26+
import Selecto from "react-selecto";
2427

2528
export function Dashboard() {
2629
const {
@@ -63,6 +66,7 @@ export function Dashboard() {
6366
<EditorHomeHeader onQueryChange={handleQuery} />
6467

6568
<div
69+
id={"selection-container"}
6670
style={{
6771
marginTop: 80,
6872
padding: 40,
@@ -107,6 +111,35 @@ export function Dashboard() {
107111
onEnter={enterNode}
108112
headerActions={headerActions}
109113
/>
114+
<Selecto
115+
container={document.querySelector("#selection-container")}
116+
dragContainer={document.querySelector("#selection-container")}
117+
selectableTargets={[DASHBOARD_ITEM_CARD_SELECTOR]}
118+
selectByClick={true}
119+
selectFromInside={true}
120+
continueSelect={true}
121+
toggleContinueSelect={"shift"}
122+
keyContainer={window}
123+
hitRate={0}
124+
scrollOptions={{
125+
container: document.querySelector(
126+
"#selection-container"
127+
) as HTMLDivElement,
128+
}}
129+
onSelect={(e) => {
130+
// TODO: incomplete
131+
e.added.forEach((el) => {
132+
const id = el.id;
133+
// const path = el.getAttribute(DASHBOARD_ITEM_PATH_ATTRIBUTE);
134+
selectNode([...selection, id]);
135+
});
136+
e.removed.forEach((el) => {
137+
const id = el.id;
138+
// const path = el.getAttribute(DASHBOARD_ITEM_PATH_ATTRIBUTE);
139+
selectNode(selection.filter((p) => p !== id));
140+
});
141+
}}
142+
/>
110143
</div>
111144
</Providers>
112145
);

yarn.lock

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,6 +1290,13 @@
12901290
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
12911291
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
12921292

1293+
"@cfcs/core@^0.0.6":
1294+
version "0.0.6"
1295+
resolved "https://registry.yarnpkg.com/@cfcs/core/-/core-0.0.6.tgz#9f8499dcd2ad29fd96d8fa72055411cd4a249121"
1296+
integrity sha512-FxfJMwoLB8MEMConeXUCqtMGqxdtePQxRBOiGip9ULcYYam3WfCgoY6xdnMaSkYvRvmosp5iuG+TiPofm65+Pw==
1297+
dependencies:
1298+
"@egjs/component" "^3.0.2"
1299+
12931300
"@cnakazawa/watch@^1.0.3":
12941301
version "1.0.4"
12951302
resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
@@ -1412,6 +1419,16 @@
14121419
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
14131420
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
14141421

1422+
"@daybrush/utils@1.6.0":
1423+
version "1.6.0"
1424+
resolved "https://registry.yarnpkg.com/@daybrush/utils/-/utils-1.6.0.tgz#0dfd2c360764f63380df4ec0d44e176c69f7bbc3"
1425+
integrity sha512-9MjMoOLl1U+l8lXByN3BbLZXf+mktoLyeb6t78Jz2WZ7LRldK0FNg8oW//9giO2hHCUyxS7LX6jS1hToGIfRWA==
1426+
1427+
"@daybrush/utils@^1.0.0", "@daybrush/utils@^1.1.1", "@daybrush/utils@^1.3.1", "@daybrush/utils@^1.4.0", "@daybrush/utils@^1.7.1":
1428+
version "1.10.0"
1429+
resolved "https://registry.yarnpkg.com/@daybrush/utils/-/utils-1.10.0.tgz#2a2235269b960b7ffaf05ca2e75379ea1fb58204"
1430+
integrity sha512-IDT0DWAGcjxb2+WMr8pHrVTkHVKdilBumX1SubXJUlowN4rMSLphwDxvMNfv+vQOrdCPXSoPVZ3mhfrHsQ9Xow==
1431+
14151432
"@design-sdk/asset-repository@^0.0.43":
14161433
version "0.0.43"
14171434
resolved "https://registry.yarnpkg.com/@design-sdk/asset-repository/-/asset-repository-0.0.43.tgz#7afc704da2b642474980a51be884215a2631780e"
@@ -1656,6 +1673,23 @@
16561673
dependencies:
16571674
tslib "^2.0.0"
16581675

1676+
"@egjs/children-differ@^1.0.1":
1677+
version "1.0.1"
1678+
resolved "https://registry.yarnpkg.com/@egjs/children-differ/-/children-differ-1.0.1.tgz#5465fa80671d5ca3564ebe912f48b05b3e8a14fd"
1679+
integrity sha512-DRvyqMf+CPCOzAopQKHtW+X8iN6Hy6SFol+/7zCUiE5y4P/OB8JP8FtU4NxtZwtafvSL4faD5KoQYPj3JHzPFQ==
1680+
dependencies:
1681+
"@egjs/list-differ" "^1.0.0"
1682+
1683+
"@egjs/component@^3.0.2":
1684+
version "3.0.2"
1685+
resolved "https://registry.yarnpkg.com/@egjs/component/-/component-3.0.2.tgz#c56794fcf1b2cb2768d09b021444779e54d0de1b"
1686+
integrity sha512-Mze3mwEE19+dERrimg0JVLtpOHG4AC+LOuKqvF4qGZjn0k23ZbNI7b/gy1LFR63LigC2b8k70aDjy8xoT+WNPA==
1687+
1688+
"@egjs/list-differ@^1.0.0":
1689+
version "1.0.0"
1690+
resolved "https://registry.yarnpkg.com/@egjs/list-differ/-/list-differ-1.0.0.tgz#2277aff52e3e4bd9318d5c30ffc3ba3b6216f05e"
1691+
integrity sha512-HsbMKc0ZAQH+EUeCmI/2PvTYSybmkaWwakU8QGDYYgMVIg9BQ5sM0A0Nnombjxo2+JzXHxmH+jw//yGX+y6GYw==
1692+
16591693
"@emotion-icons/bootstrap@3.27.0":
16601694
version "3.27.0"
16611695
resolved "https://registry.yarnpkg.com/@emotion-icons/bootstrap/-/bootstrap-3.27.0.tgz#53cde4cc341e0aa79f9a717ee78f2502c9bc1ae5"
@@ -5982,6 +6016,28 @@
59826016
estree-walker "^1.0.1"
59836017
picomatch "^2.2.2"
59846018

6019+
"@scena/dragscroll@^1.2.1":
6020+
version "1.3.0"
6021+
resolved "https://registry.yarnpkg.com/@scena/dragscroll/-/dragscroll-1.3.0.tgz#3a9f30a4153eeb2d25df22004ddf602db6d55583"
6022+
integrity sha512-UlK/g9IX8fJ8+YczqfUT7WDjx/5KKQMU2/uZLYLXV8FWuzWS2WWpt2u1G6KCIF65380oCnCYOs7nOrYpedsOaQ==
6023+
dependencies:
6024+
"@daybrush/utils" "1.6.0"
6025+
"@scena/event-emitter" "^1.0.2"
6026+
6027+
"@scena/event-emitter@^1.0.2", "@scena/event-emitter@^1.0.5":
6028+
version "1.0.5"
6029+
resolved "https://registry.yarnpkg.com/@scena/event-emitter/-/event-emitter-1.0.5.tgz#047e3acef93cf238d7ce3a8cc5a12ec6bd9c3bb1"
6030+
integrity sha512-AzY4OTb0+7ynefmWFQ6hxDdk0CySAq/D4efljfhtRHCOP7MBF9zUfhKG3TJiroVjASqVgkRJFdenS8ArZo6Olg==
6031+
dependencies:
6032+
"@daybrush/utils" "^1.1.1"
6033+
6034+
"@scena/matrix@^1.0.0":
6035+
version "1.1.1"
6036+
resolved "https://registry.yarnpkg.com/@scena/matrix/-/matrix-1.1.1.tgz#5297f71825c72e2c2c8f802f924f482ed200c43c"
6037+
integrity sha512-JVKBhN0tm2Srl+Yt+Ywqu0oLgLcdemDQlD1OxmN9jaCTwaFPZ7tY8n6dhVgMEaR9qcR7r+kAlMXnSfNyYdE+Vg==
6038+
dependencies:
6039+
"@daybrush/utils" "^1.4.0"
6040+
59856041
"@sinclair/typebox@^0.24.1":
59866042
version "0.24.51"
59876043
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f"
@@ -10317,6 +10373,22 @@ css-selector-tokenizer@^0.7.0:
1031710373
cssesc "^3.0.0"
1031810374
fastparse "^1.1.2"
1031910375

10376+
css-styled@^1.0.0:
10377+
version "1.0.1"
10378+
resolved "https://registry.yarnpkg.com/css-styled/-/css-styled-1.0.1.tgz#803dc2bf615954805a56679cc500065c756ad525"
10379+
integrity sha512-psJCbNDPPusDBWH/gszP6BetPh577QaqpvaysTNPitxX0nxdGiTgELiOCus0gZ0yXk3gvjShBrFP07nvn58/TQ==
10380+
dependencies:
10381+
"@daybrush/utils" "^1.0.0"
10382+
string-hash "^1.1.3"
10383+
10384+
css-to-mat@^1.0.3:
10385+
version "1.0.3"
10386+
resolved "https://registry.yarnpkg.com/css-to-mat/-/css-to-mat-1.0.3.tgz#5c0d9b572b68b57fa8ba0b1a4c572c18ce3b2b60"
10387+
integrity sha512-HADRhVqPc8wFqEp6ClK+uuPYg+FMBinNo2ReLyI/KQCncmHPJ60o5zldyJG7NjsTqXWbdfGJO51jnoxfMvWJiA==
10388+
dependencies:
10389+
"@daybrush/utils" "^1.3.1"
10390+
"@scena/matrix" "^1.0.0"
10391+
1032010392
css-what@^6.0.1:
1032110393
version "6.1.0"
1032210394
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
@@ -12072,6 +12144,11 @@ framesync@6.0.1:
1207212144
dependencies:
1207312145
tslib "^2.1.0"
1207412146

12147+
framework-utils@^1.1.0:
12148+
version "1.1.0"
12149+
resolved "https://registry.yarnpkg.com/framework-utils/-/framework-utils-1.1.0.tgz#a3b528bce838dfd623148847dc92371b09d0da2d"
12150+
integrity sha512-KAfqli5PwpFJ8o3psRNs8svpMGyCSAe8nmGcjQ0zZBWN2H6dZDnq+ABp3N3hdUmFeMrLtjOCTXD4yplUJIWceg==
12151+
1207512152
fresh@0.5.2:
1207612153
version "0.5.2"
1207712154
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
@@ -12262,6 +12339,14 @@ gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2:
1226212339
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1226312340
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1226412341

12342+
gesto@^1.13.1:
12343+
version "1.13.4"
12344+
resolved "https://registry.yarnpkg.com/gesto/-/gesto-1.13.4.tgz#5f53608dfac589e21acd2b905f51fb259f15a77f"
12345+
integrity sha512-TkXGgv8nC/IIjOO2dMrgCNovSnuRfPTJybmtwponzGihCje8QgLEdMf+h/RERu6O+wq8FZTSJ6ihIO9ytt4/Qg==
12346+
dependencies:
12347+
"@daybrush/utils" "^1.7.1"
12348+
"@scena/event-emitter" "^1.0.2"
12349+
1226512350
get-caller-file@^2.0.5:
1226612351
version "2.0.5"
1226712352
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
@@ -14699,6 +14784,21 @@ just-diff@^5.0.1:
1469914784
resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202"
1470014785
integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ==
1470114786

14787+
keycode@^2.2.0:
14788+
version "2.2.1"
14789+
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff"
14790+
integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==
14791+
14792+
keycon@^1.2.0:
14793+
version "1.3.2"
14794+
resolved "https://registry.yarnpkg.com/keycon/-/keycon-1.3.2.tgz#4def6e13ee450b22d3d6a8eaf7215dda8ecbde97"
14795+
integrity sha512-rNdi3Izqkp4r2P+f55Nrk8uCdEFS+eiMoUVNuIJOQ/qsTM0xuMvk3sv5E41pjfrClCGlC+T72MpXf6O+k9UXuA==
14796+
dependencies:
14797+
"@cfcs/core" "^0.0.6"
14798+
"@daybrush/utils" "^1.7.1"
14799+
"@scena/event-emitter" "^1.0.2"
14800+
keycode "^2.2.0"
14801+
1470214802
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
1470314803
version "3.2.2"
1470414804
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@@ -16775,6 +16875,13 @@ otplib@^12.0.1:
1677516875
"@otplib/preset-default" "^12.0.1"
1677616876
"@otplib/preset-v11" "^12.0.1"
1677716877

16878+
overlap-area@^1.1.0:
16879+
version "1.1.0"
16880+
resolved "https://registry.yarnpkg.com/overlap-area/-/overlap-area-1.1.0.tgz#1fcaa21bdb9cb1ace973d9aa299ae6b56557a4c2"
16881+
integrity sha512-3dlJgJCaVeXH0/eZjYVJvQiLVVrPO4U1ZGqlATtx6QGO3b5eNM6+JgUKa7oStBTdYuGTk7gVoABCW6Tp+dhRdw==
16882+
dependencies:
16883+
"@daybrush/utils" "^1.7.1"
16884+
1677816885
p-all@^2.1.0:
1677916886
version "2.1.0"
1678016887
resolved "https://registry.yarnpkg.com/p-all/-/p-all-2.1.0.tgz#91419be56b7dee8fe4c5db875d55e0da084244a0"
@@ -18448,6 +18555,13 @@ react-resizable@^3.0.1, react-resizable@^3.0.4:
1844818555
prop-types "15.x"
1844918556
react-draggable "^4.0.3"
1845018557

18558+
react-selecto@^1.20.2:
18559+
version "1.20.2"
18560+
resolved "https://registry.yarnpkg.com/react-selecto/-/react-selecto-1.20.2.tgz#494bd4e47d9881a9871a91d8693300f9c5b16414"
18561+
integrity sha512-fLE3fAymw9Kz9Y5gB2+DqtJ59YssS+gnalJ1EptWbwINJK3DwPj9e3lw8O76s2ctbZ92TtrjaLXWbfU+MiaT1A==
18562+
dependencies:
18563+
selecto "~1.20.2"
18564+
1845118565
react-spring@^9.3.2:
1845218566
version "9.5.5"
1845318567
resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.5.5.tgz#314009a65efc04d0ef157d3d60590dbb9de65f3c"
@@ -19299,6 +19413,22 @@ screen-size-specs@0.0.1:
1929919413
resolved "https://registry.yarnpkg.com/screen-size-specs/-/screen-size-specs-0.0.1.tgz#b2ca8884a4be9379d9162b0ecf68e9e4ce7aaf62"
1930019414
integrity sha512-AkY740td9TAAQOacmsjfwCGg8yWvs4NzPZxibQczfcBy5S1oZh/dYX9a2uBPAE+0fQa2pJS8SUCkPTnfvmtwbg==
1930119415

19416+
selecto@~1.20.2:
19417+
version "1.20.2"
19418+
resolved "https://registry.yarnpkg.com/selecto/-/selecto-1.20.2.tgz#196e7876f72675858ff814747701cd482b57e187"
19419+
integrity sha512-nhsBUvONr8DtRmoxIEzAYTLJm8U8XVT2KK6HWiAEjUfz/Bd2c8MJBilGJ34ra8/UDpSZnXYQkn3DH/GaTXZTQQ==
19420+
dependencies:
19421+
"@daybrush/utils" "^1.7.1"
19422+
"@egjs/children-differ" "^1.0.1"
19423+
"@scena/dragscroll" "^1.2.1"
19424+
"@scena/event-emitter" "^1.0.5"
19425+
css-styled "^1.0.0"
19426+
css-to-mat "^1.0.3"
19427+
framework-utils "^1.1.0"
19428+
gesto "^1.13.1"
19429+
keycon "^1.2.0"
19430+
overlap-area "^1.1.0"
19431+
1930219432
selenium-webdriver@4.5.0:
1930319433
version "4.5.0"
1930419434
resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.5.0.tgz#7e20d0fc038177970dad81159950c12f7411ac0d"
@@ -19929,6 +20059,11 @@ strict-uri-encode@^2.0.0:
1992920059
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
1993020060
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
1993120061

20062+
string-hash@^1.1.3:
20063+
version "1.1.3"
20064+
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
20065+
integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==
20066+
1993220067
string-length@^4.0.1:
1993320068
version "4.0.2"
1993420069
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"

0 commit comments

Comments
 (0)