hmmmmmm
This commit is contained in:
parent
a91bfdb51b
commit
723c42dd0a
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Canvas</title>
|
||||
<title>ggraph</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "tldraw-yjs-example",
|
||||
"name": "ggraph",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
|
|
@ -11,6 +11,8 @@
|
|||
"lint": "yarn dlx @biomejs/biome check --apply src"
|
||||
},
|
||||
"dependencies": {
|
||||
"@radix-ui/react-dropdown-menu": "^2.0.6",
|
||||
"@radix-ui/react-icons": "1.3.0",
|
||||
"partykit": "0.0.27",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import "tldraw/tldraw.css";
|
|||
// import { DevUi } from "./DevUI";
|
||||
// import { uiOverrides } from "./ui-overrides";
|
||||
import { useYjsStore } from "./useYjsStore";
|
||||
import { AgentButton } from "./components/AgentButton";
|
||||
|
||||
// const customShapeUtils = [DevShapeUtil];
|
||||
// const customTools = [DevShapeTool];
|
||||
|
|
@ -28,7 +29,7 @@ export default function Canvas() {
|
|||
autoFocus
|
||||
store={store}
|
||||
components={{
|
||||
SharePanel: NameEditor,
|
||||
SharePanel: AgentButton,
|
||||
}}
|
||||
// shapeUtils={customShapeUtils}
|
||||
// tools={customTools}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,151 @@
|
|||
import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
|
||||
import { Dropdown, DropdownItem } from './Dropdown'
|
||||
import { useState } from 'react'
|
||||
|
||||
|
||||
type Agent = {
|
||||
name: string,
|
||||
boundClientIds: string[],
|
||||
color: string,
|
||||
}
|
||||
|
||||
|
||||
export function AgentButton() {
|
||||
const [agents, setAgents] = useState<Agent[]>([
|
||||
{ name: 'Floof der Vanderbelt', boundClientIds: ['312342'], color: '#eb4034' },
|
||||
{ name: 'Bark', boundClientIds: ['312342', '312343'], color: '#32d96c' },
|
||||
{ name: 'Meow', boundClientIds: [], color: '#3db9eb' },
|
||||
])
|
||||
const [boundToAgent, setBoundToAgent] = useState<string | null>('Meow')
|
||||
|
||||
const you = agents.find((agent: Agent) => agent.name === boundToAgent)
|
||||
const agentsWithoutYou = agents.filter((agent: Agent) => agent.name !== boundToAgent)
|
||||
|
||||
const handleColorChange = (name: string, color: string) => {
|
||||
setAgents(agents.map(agent =>
|
||||
agent.name === name ? { ...agent, color } : agent
|
||||
))
|
||||
}
|
||||
|
||||
const handleDelete = (name: string) => {
|
||||
setAgents(agents.filter(agent => agent.name !== name))
|
||||
if (boundToAgent === name) {
|
||||
setBoundToAgent(null)
|
||||
}
|
||||
}
|
||||
|
||||
const handleBind = (name: string) => {
|
||||
setBoundToAgent(name)
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Dropdown
|
||||
trigger={
|
||||
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
||||
{boundToAgent ? (
|
||||
<>
|
||||
<span>{boundToAgent}</span>
|
||||
<div style={{ width: '16px', height: '16px', backgroundColor: you?.color, borderRadius: '50%' }} />
|
||||
</>
|
||||
) : 'Join'}
|
||||
</div>
|
||||
}
|
||||
>
|
||||
{you && <AgentItem
|
||||
agent={you}
|
||||
onColorChange={(color) => handleColorChange(you.name, color)}
|
||||
onDelete={() => handleDelete(you.name)}
|
||||
onBind={() => handleBind(you.name)}
|
||||
/>}
|
||||
<Separator />
|
||||
{agentsWithoutYou.map((agent: Agent) => (
|
||||
<AgentItem
|
||||
key={agent.name}
|
||||
agent={agent}
|
||||
onColorChange={(color) => handleColorChange(agent.name, color)}
|
||||
onDelete={() => handleDelete(agent.name)}
|
||||
onBind={() => handleBind(agent.name)}
|
||||
/>
|
||||
))}
|
||||
</Dropdown>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function AgentItem({ agent, onColorChange, onDelete, onBind }: { agent: Agent, onColorChange: (color: string) => void, onDelete: () => void, onBind: () => void }) {
|
||||
return <DropdownItem>
|
||||
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', width: '100%' }}>
|
||||
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
||||
<ColorPicker color={agent.color} onChange={onColorChange} />
|
||||
<span onClick={onBind}>{agent.name}</span>
|
||||
</div>
|
||||
<DeleteButton onClick={onDelete} />
|
||||
</div>
|
||||
</DropdownItem>
|
||||
}
|
||||
|
||||
function Separator() {
|
||||
return <DropdownMenu.Separator
|
||||
style={{
|
||||
height: '1px',
|
||||
width: 'calc(100% - 10px)',
|
||||
backgroundColor: 'lightgray',
|
||||
margin: '5px',
|
||||
}}
|
||||
/>
|
||||
}
|
||||
|
||||
function ColorPicker({ color, onChange }: { color: string, onChange: (color: string) => void }) {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
width: '20px',
|
||||
height: '20px',
|
||||
borderRadius: '50%',
|
||||
backgroundColor: color,
|
||||
cursor: 'pointer',
|
||||
position: 'relative',
|
||||
overflow: 'hidden',
|
||||
}}
|
||||
>
|
||||
<input
|
||||
type="color"
|
||||
value={color}
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
onChange={(e) => onChange(e.target.value)}
|
||||
style={{
|
||||
position: 'absolute',
|
||||
opacity: 0,
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
cursor: 'pointer',
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function DeleteButton({ onClick }: { onClick: () => void }) {
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
onClick={onClick}
|
||||
style={{
|
||||
background: 'none',
|
||||
border: 'none',
|
||||
color: '#999',
|
||||
fontSize: '20px',
|
||||
cursor: 'pointer',
|
||||
padding: 0,
|
||||
paddingLeft: 4,
|
||||
borderRadius: '50%',
|
||||
transition: 'background-color 0.2s',
|
||||
}}
|
||||
onMouseEnter={(e) => e.currentTarget.style.backgroundColor = '#f0f0f0'}
|
||||
onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
|
||||
// import { CheckIcon } from '@radix-ui/react-icons'
|
||||
|
||||
export function Dropdown({
|
||||
trigger,
|
||||
children,
|
||||
}: {
|
||||
trigger: React.ReactNode
|
||||
children: React.ReactNode
|
||||
}) {
|
||||
return (
|
||||
<DropdownMenu.Root modal={false}>
|
||||
<DropdownMenu.Trigger asChild>
|
||||
<button
|
||||
type="button"
|
||||
style={{ cursor: 'pointer', marginTop: 8, marginRight: 2, zIndex: 100000, pointerEvents: 'all', backgroundColor: 'transparent', border: 'none', outline: 'none' }}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
borderRadius: 'var(--radius-2)',
|
||||
boxShadow: 'var(--shadow-1)',
|
||||
color: 'var(--color-text)',
|
||||
fontWeight: 'bold',
|
||||
padding: '8px 16px',
|
||||
backgroundColor: 'var(--color-panel)',
|
||||
}}
|
||||
>
|
||||
{trigger}
|
||||
</div>
|
||||
</button>
|
||||
</DropdownMenu.Trigger>
|
||||
<DropdownMenu.Portal>
|
||||
<DropdownMenu.Content
|
||||
align="end"
|
||||
style={{
|
||||
maxHeight: '80vh',
|
||||
overflow: 'auto',
|
||||
marginTop: 5,
|
||||
marginRight: 8,
|
||||
boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
|
||||
backgroundColor: 'white',
|
||||
borderRadius: '9px',
|
||||
border: '1px solid #e5e7eb',
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
pointerEvents: 'all',
|
||||
background: '#fdfdfd',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'flex-start',
|
||||
fontSize: '12px',
|
||||
width: '100%',
|
||||
padding: '4px',
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
</DropdownMenu.Content>
|
||||
</DropdownMenu.Portal>
|
||||
</DropdownMenu.Root>
|
||||
)
|
||||
}
|
||||
|
||||
export function DropdownItem({
|
||||
// action,
|
||||
children,
|
||||
}: {
|
||||
// action?: () => void
|
||||
children: React.ReactNode
|
||||
}) {
|
||||
return (
|
||||
<DropdownMenu.Item asChild>
|
||||
<div
|
||||
// className="showHover"
|
||||
// type="button"
|
||||
style={{
|
||||
display: 'flex',
|
||||
flexWrap: 'wrap',
|
||||
justifyContent: 'flex-start',
|
||||
alignItems: 'center',
|
||||
height: '36px',
|
||||
// padding: '0 8px',
|
||||
textAlign: 'left',
|
||||
width: '100%',
|
||||
borderRadius: '6px',
|
||||
boxSizing: 'border-box',
|
||||
textShadow: '1px 1px #fff',
|
||||
gap: '6px',
|
||||
paddingLeft: '8px',
|
||||
paddingRight: '8px',
|
||||
cursor: 'pointer',
|
||||
backgroundColor: 'transparent',
|
||||
border: 'none',
|
||||
outline: 'none',
|
||||
}}
|
||||
// onClick={(e) => {
|
||||
// e.preventDefault()
|
||||
// action?.()
|
||||
// }}
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
</DropdownMenu.Item>
|
||||
)
|
||||
}
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
.custom-layout {
|
||||
position: absolute;
|
||||
inset: 0px;
|
||||
z-index: 300;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.custom-toolbar {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 8px;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.custom-button {
|
||||
pointer-events: all;
|
||||
padding: 4px 12px;
|
||||
background: white;
|
||||
border: 1px solid black;
|
||||
border-radius: 64px;
|
||||
&:hover {
|
||||
background-color: rgb(240, 240, 240);
|
||||
}
|
||||
}
|
||||
|
||||
.custom-button[data-isactive="true"] {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Style the button that is used to open and close the collapsible content */
|
||||
.collapsible {
|
||||
background-color: #eee;
|
||||
color: #444;
|
||||
cursor: pointer;
|
||||
padding: 18px;
|
||||
width: 100%;
|
||||
border: none;
|
||||
text-align: left;
|
||||
outline: none;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
/* Add a background color to the button if it is clicked on (add the .active class with JS), and when you move the mouse over it (hover) */
|
||||
.active,
|
||||
.collapsible:hover {
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
/* Style the collapsible content. Note: hidden by default */
|
||||
.content {
|
||||
padding: 0 18px;
|
||||
display: none;
|
||||
overflow: hidden;
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap');
|
||||
|
||||
html,
|
||||
body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
overscroll-behavior: none;
|
||||
touch-action: none;
|
||||
min-height: 100vh;
|
||||
font-size: 16px;
|
||||
/* mobile viewport bug fix */
|
||||
min-height: -webkit-fill-available;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
html,
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.tldraw__editor {
|
||||
position: fixed;
|
||||
inset: 0px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.examples {
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.examples__header {
|
||||
width: fit-content;
|
||||
padding-bottom: 32px;
|
||||
}
|
||||
|
||||
.examples__lockup {
|
||||
height: 56px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.examples__list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.examples__list__item {
|
||||
padding: 8px 12px;
|
||||
margin: 0px -12px;
|
||||
}
|
||||
|
||||
.examples__list__item a {
|
||||
padding: 8px 12px;
|
||||
margin: 0px -12px;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.examples__list__item a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import React from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import App from "./App.tsx";
|
||||
import "./css/index.css";
|
||||
import "./style.css";
|
||||
|
||||
ReactDOM.createRoot(document.getElementById("root")!).render(
|
||||
<React.StrictMode>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap");
|
||||
|
||||
html,
|
||||
body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-family: "Inter", sans-serif;
|
||||
overscroll-behavior: none;
|
||||
touch-action: none;
|
||||
min-height: 100vh;
|
||||
font-size: 16px;
|
||||
/* mobile viewport bug fix */
|
||||
min-height: -webkit-fill-available;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
html,
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.tldraw__editor {
|
||||
position: fixed;
|
||||
inset: 0px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.showHover:hover {
|
||||
background-color: #ededed !important;
|
||||
}
|
||||
|
|
@ -46,6 +46,7 @@ export function useYjsStore({
|
|||
const yDoc = new Y.Doc({ gc: true });
|
||||
const yArr = yDoc.getArray<{ key: string; val: TLRecord }>(`tl_${roomId}`);
|
||||
const yStore = new YKeyValue(yArr);
|
||||
// const meta = yDoc.getMap<SerializedSchema>('meta')
|
||||
|
||||
return {
|
||||
yDoc,
|
||||
|
|
@ -131,6 +132,8 @@ export function useYjsStore({
|
|||
|
||||
/* -------------------- Awareness ------------------- */
|
||||
|
||||
// setUserPreferences({ id: yClientId })
|
||||
|
||||
const userPreferences = computed<{
|
||||
id: string;
|
||||
color: string;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,330 @@
|
|||
import {
|
||||
InstancePresenceRecordType,
|
||||
TLAnyShapeUtilConstructor,
|
||||
TLInstancePresence,
|
||||
TLRecord,
|
||||
TLStoreWithStatus,
|
||||
computed,
|
||||
createPresenceStateDerivation,
|
||||
createTLStore,
|
||||
defaultShapeUtils,
|
||||
defaultUserPreferences,
|
||||
getUserPreferences,
|
||||
setUserPreferences,
|
||||
react,
|
||||
SerializedSchema,
|
||||
} from 'tldraw'
|
||||
import { useEffect, useMemo, useState } from 'react'
|
||||
import { YKeyValue } from 'y-utility/y-keyvalue'
|
||||
import { WebsocketProvider } from 'y-websocket'
|
||||
import * as Y from 'yjs'
|
||||
|
||||
export function useYjsStore({
|
||||
roomId = 'example',
|
||||
hostUrl = import.meta.env.MODE === 'development'
|
||||
? 'ws://localhost:1234'
|
||||
: 'wss://demos.yjs.dev',
|
||||
shapeUtils = [],
|
||||
}: Partial<{
|
||||
hostUrl: string
|
||||
roomId: string
|
||||
version: number
|
||||
shapeUtils: TLAnyShapeUtilConstructor[]
|
||||
}>) {
|
||||
const [store] = useState(() => {
|
||||
const store = createTLStore({
|
||||
shapeUtils: [...defaultShapeUtils, ...shapeUtils],
|
||||
})
|
||||
|
||||
return store
|
||||
})
|
||||
|
||||
const [storeWithStatus, setStoreWithStatus] = useState<TLStoreWithStatus>({
|
||||
status: 'loading',
|
||||
})
|
||||
|
||||
const { yDoc, yStore, meta, room } = useMemo(() => {
|
||||
const yDoc = new Y.Doc({ gc: true })
|
||||
const yArr = yDoc.getArray<{ key: string; val: TLRecord }>(`tl_${roomId}`)
|
||||
const yStore = new YKeyValue(yArr)
|
||||
const meta = yDoc.getMap<SerializedSchema>('meta')
|
||||
|
||||
return {
|
||||
yDoc,
|
||||
yStore,
|
||||
meta,
|
||||
room: new WebsocketProvider(hostUrl, roomId, yDoc, { connect: true }),
|
||||
}
|
||||
}, [hostUrl, roomId])
|
||||
|
||||
useEffect(() => {
|
||||
setStoreWithStatus({ status: 'loading' })
|
||||
|
||||
const unsubs: (() => void)[] = []
|
||||
|
||||
function handleSync() {
|
||||
// 1.
|
||||
// Connect store to yjs store and vis versa, for both the document and awareness
|
||||
|
||||
/* -------------------- Document -------------------- */
|
||||
|
||||
// Sync store changes to the yjs doc
|
||||
unsubs.push(
|
||||
store.listen(
|
||||
function syncStoreChangesToYjsDoc({ changes }) {
|
||||
yDoc.transact(() => {
|
||||
Object.values(changes.added).forEach((record) => {
|
||||
yStore.set(record.id, record)
|
||||
})
|
||||
|
||||
Object.values(changes.updated).forEach(([_, record]) => {
|
||||
yStore.set(record.id, record)
|
||||
})
|
||||
|
||||
Object.values(changes.removed).forEach((record) => {
|
||||
yStore.delete(record.id)
|
||||
})
|
||||
})
|
||||
},
|
||||
{ source: 'user', scope: 'document' }, // only sync user's document changes
|
||||
),
|
||||
)
|
||||
|
||||
// Sync the yjs doc changes to the store
|
||||
const handleChange = (
|
||||
changes: Map<
|
||||
string,
|
||||
| { action: 'delete'; oldValue: TLRecord }
|
||||
| { action: 'update'; oldValue: TLRecord; newValue: TLRecord }
|
||||
| { action: 'add'; newValue: TLRecord }
|
||||
>,
|
||||
transaction: Y.Transaction,
|
||||
) => {
|
||||
if (transaction.local) return
|
||||
|
||||
const toRemove: TLRecord['id'][] = []
|
||||
const toPut: TLRecord[] = []
|
||||
|
||||
changes.forEach((change, id) => {
|
||||
switch (change.action) {
|
||||
case 'add':
|
||||
case 'update': {
|
||||
const record = yStore.get(id)!
|
||||
toPut.push(record)
|
||||
break
|
||||
}
|
||||
case 'delete': {
|
||||
toRemove.push(id as TLRecord['id'])
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// put / remove the records in the store
|
||||
store.mergeRemoteChanges(() => {
|
||||
if (toRemove.length) store.remove(toRemove)
|
||||
if (toPut.length) store.put(toPut)
|
||||
})
|
||||
}
|
||||
|
||||
yStore.on('change', handleChange)
|
||||
unsubs.push(() => yStore.off('change', handleChange))
|
||||
|
||||
/* -------------------- Awareness ------------------- */
|
||||
|
||||
const yClientId = room.awareness.clientID.toString()
|
||||
setUserPreferences({ id: yClientId })
|
||||
|
||||
const userPreferences = computed<{
|
||||
id: string
|
||||
color: string
|
||||
name: string
|
||||
}>('userPreferences', () => {
|
||||
const user = getUserPreferences()
|
||||
return {
|
||||
id: user.id,
|
||||
color: user.color ?? defaultUserPreferences.color,
|
||||
name: user.name ?? defaultUserPreferences.name,
|
||||
}
|
||||
})
|
||||
|
||||
// Create the instance presence derivation
|
||||
const presenceId = InstancePresenceRecordType.createId(yClientId)
|
||||
const presenceDerivation = createPresenceStateDerivation(
|
||||
userPreferences,
|
||||
presenceId,
|
||||
)(store)
|
||||
|
||||
// Set our initial presence from the derivation's current value
|
||||
room.awareness.setLocalStateField('presence', presenceDerivation.get())
|
||||
|
||||
// When the derivation change, sync presence to to yjs awareness
|
||||
unsubs.push(
|
||||
react('when presence changes', () => {
|
||||
const presence = presenceDerivation.get()
|
||||
requestAnimationFrame(() => {
|
||||
room.awareness.setLocalStateField('presence', presence)
|
||||
})
|
||||
}),
|
||||
)
|
||||
|
||||
// Sync yjs awareness changes to the store
|
||||
const handleUpdate = (update: {
|
||||
added: number[]
|
||||
updated: number[]
|
||||
removed: number[]
|
||||
}) => {
|
||||
const states = room.awareness.getStates() as Map<
|
||||
number,
|
||||
{ presence: TLInstancePresence }
|
||||
>
|
||||
|
||||
const toRemove: TLInstancePresence['id'][] = []
|
||||
const toPut: TLInstancePresence[] = []
|
||||
|
||||
// Connect records to put / remove
|
||||
for (const clientId of update.added) {
|
||||
const state = states.get(clientId)
|
||||
if (state?.presence && state.presence.id !== presenceId) {
|
||||
toPut.push(state.presence)
|
||||
}
|
||||
}
|
||||
|
||||
for (const clientId of update.updated) {
|
||||
const state = states.get(clientId)
|
||||
if (state?.presence && state.presence.id !== presenceId) {
|
||||
toPut.push(state.presence)
|
||||
}
|
||||
}
|
||||
|
||||
for (const clientId of update.removed) {
|
||||
toRemove.push(
|
||||
InstancePresenceRecordType.createId(clientId.toString()),
|
||||
)
|
||||
}
|
||||
|
||||
// put / remove the records in the store
|
||||
store.mergeRemoteChanges(() => {
|
||||
if (toRemove.length) store.remove(toRemove)
|
||||
if (toPut.length) store.put(toPut)
|
||||
})
|
||||
}
|
||||
|
||||
const handleMetaUpdate = () => {
|
||||
const theirSchema = meta.get('schema')
|
||||
if (!theirSchema) {
|
||||
throw new Error('No schema found in the yjs doc')
|
||||
}
|
||||
// If the shared schema is newer than our schema, the user must refresh
|
||||
const newMigrations = store.schema.getMigrationsSince(theirSchema)
|
||||
|
||||
if (!newMigrations.ok || newMigrations.value.length > 0) {
|
||||
window.alert('The schema has been updated. Please refresh the page.')
|
||||
yDoc.destroy()
|
||||
}
|
||||
}
|
||||
meta.observe(handleMetaUpdate)
|
||||
unsubs.push(() => meta.unobserve(handleMetaUpdate))
|
||||
|
||||
room.awareness.on('update', handleUpdate)
|
||||
unsubs.push(() => room.awareness.off('update', handleUpdate))
|
||||
|
||||
// 2.
|
||||
// Initialize the store with the yjs doc records—or, if the yjs doc
|
||||
// is empty, initialize the yjs doc with the default store records.
|
||||
if (yStore.yarray.length) {
|
||||
// Replace the store records with the yjs doc records
|
||||
const ourSchema = store.schema.serialize()
|
||||
const theirSchema = meta.get('schema')
|
||||
if (!theirSchema) {
|
||||
throw new Error('No schema found in the yjs doc')
|
||||
}
|
||||
|
||||
const records = yStore.yarray.toJSON().map(({ val }) => val)
|
||||
|
||||
const migrationResult = store.schema.migrateStoreSnapshot({
|
||||
schema: theirSchema,
|
||||
store: Object.fromEntries(
|
||||
records.map((record) => [record.id, record]),
|
||||
),
|
||||
})
|
||||
if (migrationResult.type === 'error') {
|
||||
// if the schema is newer than ours, the user must refresh
|
||||
console.error(migrationResult.reason)
|
||||
window.alert('The schema has been updated. Please refresh the page.')
|
||||
return
|
||||
}
|
||||
|
||||
yDoc.transact(() => {
|
||||
// delete any deleted records from the yjs doc
|
||||
for (const r of records) {
|
||||
if (!migrationResult.value[r.id]) {
|
||||
yStore.delete(r.id)
|
||||
}
|
||||
}
|
||||
for (const r of Object.values(migrationResult.value) as TLRecord[]) {
|
||||
yStore.set(r.id, r)
|
||||
}
|
||||
meta.set('schema', ourSchema)
|
||||
})
|
||||
|
||||
store.loadSnapshot({
|
||||
store: migrationResult.value,
|
||||
schema: ourSchema,
|
||||
})
|
||||
} else {
|
||||
// Create the initial store records
|
||||
// Sync the store records to the yjs doc
|
||||
yDoc.transact(() => {
|
||||
for (const record of store.allRecords()) {
|
||||
yStore.set(record.id, record)
|
||||
}
|
||||
meta.set('schema', store.schema.serialize())
|
||||
})
|
||||
}
|
||||
|
||||
setStoreWithStatus({
|
||||
store,
|
||||
status: 'synced-remote',
|
||||
connectionStatus: 'online',
|
||||
})
|
||||
}
|
||||
|
||||
let hasConnectedBefore = false
|
||||
|
||||
function handleStatusChange({
|
||||
status,
|
||||
}: {
|
||||
status: 'disconnected' | 'connected'
|
||||
}) {
|
||||
// If we're disconnected, set the store status to 'synced-remote' and the connection status to 'offline'
|
||||
if (status === 'disconnected') {
|
||||
setStoreWithStatus({
|
||||
store,
|
||||
status: 'synced-remote',
|
||||
connectionStatus: 'offline',
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
room.off('synced', handleSync)
|
||||
|
||||
if (status === 'connected') {
|
||||
if (hasConnectedBefore) return
|
||||
hasConnectedBefore = true
|
||||
room.on('synced', handleSync)
|
||||
unsubs.push(() => room.off('synced', handleSync))
|
||||
}
|
||||
}
|
||||
|
||||
room.on('status', handleStatusChange)
|
||||
unsubs.push(() => room.off('status', handleStatusChange))
|
||||
|
||||
return () => {
|
||||
unsubs.forEach((fn) => fn())
|
||||
unsubs.length = 0
|
||||
}
|
||||
}, [room, yDoc, store, yStore, meta])
|
||||
|
||||
return storeWithStatus
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
high level:
|
||||
- agent bindings
|
||||
- agent selectors
|
||||
- basic "social" shape
|
||||
- graph projections
|
||||
- delegated execution
|
||||
|
||||
agent bindings on document meta:
|
||||
- names, unique IDs, client IDs ?
|
||||
```json
|
||||
agents: {
|
||||
name: clientId[]
|
||||
}
|
||||
```
|
||||
|
||||
social shape props:
|
||||
```json
|
||||
function: string // e.g. "@all sum(SCALAR)"
|
||||
selector: string // e.g. "@all"
|
||||
valueType: string // e.g. "SCALAR"
|
||||
```
|
||||
673
yarn.lock
673
yarn.lock
|
|
@ -5,6 +5,13 @@ __metadata:
|
|||
version: 8
|
||||
cacheKey: 10c0
|
||||
|
||||
"@alloc/quick-lru@npm:^5.2.0":
|
||||
version: 5.2.0
|
||||
resolution: "@alloc/quick-lru@npm:5.2.0"
|
||||
checksum: 7b878c48b9d25277d0e1a9b8b2f2312a314af806b4129dc902f2bc29ab09b58236e53964689feec187b28c80d2203aff03829754773a707a8a5987f1b7682d92
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@ampproject/remapping@npm:^2.2.0":
|
||||
version: 2.2.1
|
||||
resolution: "@ampproject/remapping@npm:2.2.1"
|
||||
|
|
@ -833,6 +840,33 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@nodelib/fs.scandir@npm:2.1.5":
|
||||
version: 2.1.5
|
||||
resolution: "@nodelib/fs.scandir@npm:2.1.5"
|
||||
dependencies:
|
||||
"@nodelib/fs.stat": "npm:2.0.5"
|
||||
run-parallel: "npm:^1.1.9"
|
||||
checksum: 732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
|
||||
version: 2.0.5
|
||||
resolution: "@nodelib/fs.stat@npm:2.0.5"
|
||||
checksum: 88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@nodelib/fs.walk@npm:^1.2.3":
|
||||
version: 1.2.8
|
||||
resolution: "@nodelib/fs.walk@npm:1.2.8"
|
||||
dependencies:
|
||||
"@nodelib/fs.scandir": "npm:2.1.5"
|
||||
fastq: "npm:^1.6.0"
|
||||
checksum: db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@npmcli/agent@npm:^2.0.0":
|
||||
version: 2.2.0
|
||||
resolution: "@npmcli/agent@npm:2.2.0"
|
||||
|
|
@ -1184,6 +1218,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@radix-ui/react-icons@npm:1.3.0":
|
||||
version: 1.3.0
|
||||
resolution: "@radix-ui/react-icons@npm:1.3.0"
|
||||
peerDependencies:
|
||||
react: ^16.x || ^17.x || ^18.x
|
||||
checksum: 581657680e43fd13ff06e01f963e3afa94671d4ce6c3fb126e2c70c993ab8650faa55286974032dbccfecca4db57308fb66d53771d765887e03600cddee84ae5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@radix-ui/react-id@npm:1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "@radix-ui/react-id@npm:1.0.1"
|
||||
|
|
@ -2086,6 +2129,23 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"any-promise@npm:^1.0.0":
|
||||
version: 1.3.0
|
||||
resolution: "any-promise@npm:1.3.0"
|
||||
checksum: 60f0298ed34c74fef50daab88e8dab786036ed5a7fad02e012ab57e376e0a0b4b29e83b95ea9b5e7d89df762f5f25119b83e00706ecaccb22cfbacee98d74889
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"anymatch@npm:~3.1.2":
|
||||
version: 3.1.3
|
||||
resolution: "anymatch@npm:3.1.3"
|
||||
dependencies:
|
||||
normalize-path: "npm:^3.0.0"
|
||||
picomatch: "npm:^2.0.4"
|
||||
checksum: 57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"arch@npm:^2.2.0":
|
||||
version: 2.2.0
|
||||
resolution: "arch@npm:2.2.0"
|
||||
|
|
@ -2093,6 +2153,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"arg@npm:^5.0.2":
|
||||
version: 5.0.2
|
||||
resolution: "arg@npm:5.0.2"
|
||||
checksum: ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"aria-hidden@npm:^1.1.1":
|
||||
version: 1.2.3
|
||||
resolution: "aria-hidden@npm:1.2.3"
|
||||
|
|
@ -2132,6 +2199,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"binary-extensions@npm:^2.0.0":
|
||||
version: 2.3.0
|
||||
resolution: "binary-extensions@npm:2.3.0"
|
||||
checksum: 75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"brace-expansion@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "brace-expansion@npm:2.0.1"
|
||||
|
|
@ -2141,6 +2215,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"braces@npm:^3.0.3, braces@npm:~3.0.2":
|
||||
version: 3.0.3
|
||||
resolution: "braces@npm:3.0.3"
|
||||
dependencies:
|
||||
fill-range: "npm:^7.1.1"
|
||||
checksum: 7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"browserslist@npm:^4.21.9":
|
||||
version: 4.21.10
|
||||
resolution: "browserslist@npm:4.21.10"
|
||||
|
|
@ -2192,6 +2275,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"camelcase-css@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "camelcase-css@npm:2.0.1"
|
||||
checksum: 1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"caniuse-lite@npm:^1.0.30001517":
|
||||
version: 1.0.30001519
|
||||
resolution: "caniuse-lite@npm:1.0.30001519"
|
||||
|
|
@ -2237,6 +2327,25 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chokidar@npm:^3.5.3":
|
||||
version: 3.6.0
|
||||
resolution: "chokidar@npm:3.6.0"
|
||||
dependencies:
|
||||
anymatch: "npm:~3.1.2"
|
||||
braces: "npm:~3.0.2"
|
||||
fsevents: "npm:~2.3.2"
|
||||
glob-parent: "npm:~5.1.2"
|
||||
is-binary-path: "npm:~2.1.0"
|
||||
is-glob: "npm:~4.0.1"
|
||||
normalize-path: "npm:~3.0.0"
|
||||
readdirp: "npm:~3.6.0"
|
||||
dependenciesMeta:
|
||||
fsevents:
|
||||
optional: true
|
||||
checksum: 8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chownr@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "chownr@npm:2.0.0"
|
||||
|
|
@ -2312,6 +2421,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"commander@npm:^4.0.0":
|
||||
version: 4.1.1
|
||||
resolution: "commander@npm:4.1.1"
|
||||
checksum: 84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"concurrently@npm:^8.2.0":
|
||||
version: 8.2.0
|
||||
resolution: "concurrently@npm:8.2.0"
|
||||
|
|
@ -2364,6 +2480,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cssesc@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "cssesc@npm:3.0.0"
|
||||
bin:
|
||||
cssesc: bin/cssesc
|
||||
checksum: 6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"csstype@npm:^3.0.2":
|
||||
version: 3.1.2
|
||||
resolution: "csstype@npm:3.1.2"
|
||||
|
|
@ -2416,6 +2541,20 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"didyoumean@npm:^1.2.2":
|
||||
version: 1.2.2
|
||||
resolution: "didyoumean@npm:1.2.2"
|
||||
checksum: 95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"dlv@npm:^1.1.3":
|
||||
version: 1.1.3
|
||||
resolution: "dlv@npm:1.1.3"
|
||||
checksum: 03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eastasianwidth@npm:^0.2.0":
|
||||
version: 0.2.0
|
||||
resolution: "eastasianwidth@npm:0.2.0"
|
||||
|
|
@ -2696,6 +2835,37 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fast-glob@npm:^3.3.0":
|
||||
version: 3.3.2
|
||||
resolution: "fast-glob@npm:3.3.2"
|
||||
dependencies:
|
||||
"@nodelib/fs.stat": "npm:^2.0.2"
|
||||
"@nodelib/fs.walk": "npm:^1.2.3"
|
||||
glob-parent: "npm:^5.1.2"
|
||||
merge2: "npm:^1.3.0"
|
||||
micromatch: "npm:^4.0.4"
|
||||
checksum: 42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fastq@npm:^1.6.0":
|
||||
version: 1.17.1
|
||||
resolution: "fastq@npm:1.17.1"
|
||||
dependencies:
|
||||
reusify: "npm:^1.0.4"
|
||||
checksum: 1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fill-range@npm:^7.1.1":
|
||||
version: 7.1.1
|
||||
resolution: "fill-range@npm:7.1.1"
|
||||
dependencies:
|
||||
to-regex-range: "npm:^5.0.1"
|
||||
checksum: b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"foreground-child@npm:^3.1.0":
|
||||
version: 3.1.1
|
||||
resolution: "foreground-child@npm:3.1.1"
|
||||
|
|
@ -2762,6 +2932,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"function-bind@npm:^1.1.2":
|
||||
version: 1.1.2
|
||||
resolution: "function-bind@npm:1.1.2"
|
||||
checksum: d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"gensync@npm:^1.0.0-beta.2":
|
||||
version: 1.0.0-beta.2
|
||||
resolution: "gensync@npm:1.0.0-beta.2"
|
||||
|
|
@ -2800,6 +2977,51 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ggraph@workspace:.":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "ggraph@workspace:."
|
||||
dependencies:
|
||||
"@biomejs/biome": "npm:1.4.1"
|
||||
"@radix-ui/react-dropdown-menu": "npm:^2.0.6"
|
||||
"@radix-ui/react-icons": "npm:1.3.0"
|
||||
"@types/react": "npm:^18.2.15"
|
||||
"@types/react-dom": "npm:^18.2.7"
|
||||
"@vitejs/plugin-react": "npm:^4.0.3"
|
||||
concurrently: "npm:^8.2.0"
|
||||
partykit: "npm:0.0.27"
|
||||
react: "npm:^18.2.0"
|
||||
react-dom: "npm:^18.2.0"
|
||||
tailwindcss: "npm:^3.4.6"
|
||||
tldraw: "npm:2.3.0"
|
||||
typescript: "npm:^5.0.2"
|
||||
vite: "npm:^4.4.5"
|
||||
vite-plugin-top-level-await: "npm:^1.3.1"
|
||||
vite-plugin-wasm: "npm:^3.2.2"
|
||||
y-partykit: "npm:0.0.7"
|
||||
y-utility: "npm:0.1.3"
|
||||
y-websocket: "npm:1.5.0"
|
||||
yjs: "npm:^13.6.8"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2":
|
||||
version: 5.1.2
|
||||
resolution: "glob-parent@npm:5.1.2"
|
||||
dependencies:
|
||||
is-glob: "npm:^4.0.1"
|
||||
checksum: cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"glob-parent@npm:^6.0.2":
|
||||
version: 6.0.2
|
||||
resolution: "glob-parent@npm:6.0.2"
|
||||
dependencies:
|
||||
is-glob: "npm:^4.0.3"
|
||||
checksum: 317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"glob-to-regexp@npm:^0.4.1":
|
||||
version: 0.4.1
|
||||
resolution: "glob-to-regexp@npm:0.4.1"
|
||||
|
|
@ -2850,6 +3072,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"hasown@npm:^2.0.2":
|
||||
version: 2.0.2
|
||||
resolution: "hasown@npm:2.0.2"
|
||||
dependencies:
|
||||
function-bind: "npm:^1.1.2"
|
||||
checksum: 3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"hotkeys-js@npm:^3.11.2":
|
||||
version: 3.12.0
|
||||
resolution: "hotkeys-js@npm:3.12.0"
|
||||
|
|
@ -2958,6 +3189,24 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-binary-path@npm:~2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "is-binary-path@npm:2.1.0"
|
||||
dependencies:
|
||||
binary-extensions: "npm:^2.0.0"
|
||||
checksum: a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-core-module@npm:^2.13.0":
|
||||
version: 2.15.0
|
||||
resolution: "is-core-module@npm:2.15.0"
|
||||
dependencies:
|
||||
hasown: "npm:^2.0.2"
|
||||
checksum: da161f3d9906f459486da65609b2f1a2dfdc60887c689c234d04e88a062cb7920fa5be5fb7ab08dc43b732929653c4135ef05bf77888ae2a9040ce76815eb7b1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-docker@npm:^2.0.0":
|
||||
version: 2.2.1
|
||||
resolution: "is-docker@npm:2.2.1"
|
||||
|
|
@ -2967,6 +3216,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-extglob@npm:^2.1.1":
|
||||
version: 2.1.1
|
||||
resolution: "is-extglob@npm:2.1.1"
|
||||
checksum: 5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-fullwidth-code-point@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "is-fullwidth-code-point@npm:3.0.0"
|
||||
|
|
@ -2974,6 +3230,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
|
||||
version: 4.0.3
|
||||
resolution: "is-glob@npm:4.0.3"
|
||||
dependencies:
|
||||
is-extglob: "npm:^2.1.1"
|
||||
checksum: 17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-lambda@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "is-lambda@npm:1.0.1"
|
||||
|
|
@ -2981,6 +3246,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-number@npm:^7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "is-number@npm:7.0.0"
|
||||
checksum: b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-plain-object@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "is-plain-object@npm:5.0.0"
|
||||
|
|
@ -3038,6 +3310,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jiti@npm:^1.21.0":
|
||||
version: 1.21.6
|
||||
resolution: "jiti@npm:1.21.6"
|
||||
bin:
|
||||
jiti: bin/jiti.js
|
||||
checksum: 05b9ed58cd30d0c3ccd3c98209339e74f50abd9a17e716f65db46b6a35812103f6bde6e134be7124d01745586bca8cc5dae1d0d952267c3ebe55171949c32e56
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "js-tokens@npm:4.0.0"
|
||||
|
|
@ -3203,6 +3484,27 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lilconfig@npm:^2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "lilconfig@npm:2.1.0"
|
||||
checksum: 64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lilconfig@npm:^3.0.0":
|
||||
version: 3.1.2
|
||||
resolution: "lilconfig@npm:3.1.2"
|
||||
checksum: f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lines-and-columns@npm:^1.1.6":
|
||||
version: 1.2.4
|
||||
resolution: "lines-and-columns@npm:1.2.4"
|
||||
checksum: 3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.debounce@npm:^4.0.8":
|
||||
version: 4.0.8
|
||||
resolution: "lodash.debounce@npm:4.0.8"
|
||||
|
|
@ -3316,6 +3618,23 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"merge2@npm:^1.3.0":
|
||||
version: 1.4.1
|
||||
resolution: "merge2@npm:1.4.1"
|
||||
checksum: 254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5":
|
||||
version: 4.0.7
|
||||
resolution: "micromatch@npm:4.0.7"
|
||||
dependencies:
|
||||
braces: "npm:^3.0.3"
|
||||
picomatch: "npm:^2.3.1"
|
||||
checksum: 58fa99bc5265edec206e9163a1d2cec5fabc46a5b473c45f4a700adce88c2520456ae35f2b301e4410fb3afb27e9521fb2813f6fc96be0a48a89430e0916a772
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mimic-fn@npm:^2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "mimic-fn@npm:2.1.0"
|
||||
|
|
@ -3461,6 +3780,17 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mz@npm:^2.7.0":
|
||||
version: 2.7.0
|
||||
resolution: "mz@npm:2.7.0"
|
||||
dependencies:
|
||||
any-promise: "npm:^1.0.0"
|
||||
object-assign: "npm:^4.0.1"
|
||||
thenify-all: "npm:^1.0.0"
|
||||
checksum: 103114e93f87362f0b56ab5b2e7245051ad0276b646e3902c98397d18bb8f4a77f2ea4a2c9d3ad516034ea3a56553b60d3f5f78220001ca4c404bd711bd0af39
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"nanoid@npm:4.0.2":
|
||||
version: 4.0.2
|
||||
resolution: "nanoid@npm:4.0.2"
|
||||
|
|
@ -3479,6 +3809,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"nanoid@npm:^3.3.7":
|
||||
version: 3.3.7
|
||||
resolution: "nanoid@npm:3.3.7"
|
||||
bin:
|
||||
nanoid: bin/nanoid.cjs
|
||||
checksum: e3fb661aa083454f40500473bb69eedb85dc160e763150b9a2c567c7e9ff560ce028a9f833123b618a6ea742e311138b591910e795614a629029e86e180660f3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"napi-macros@npm:~2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "napi-macros@npm:2.0.0"
|
||||
|
|
@ -3542,6 +3881,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "normalize-path@npm:3.0.0"
|
||||
checksum: e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"npm-run-path@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "npm-run-path@npm:4.0.1"
|
||||
|
|
@ -3551,6 +3897,20 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-assign@npm:^4.0.1":
|
||||
version: 4.1.1
|
||||
resolution: "object-assign@npm:4.1.1"
|
||||
checksum: 1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-hash@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "object-hash@npm:3.0.0"
|
||||
checksum: a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"onetime@npm:^5.1.2":
|
||||
version: 5.1.2
|
||||
resolution: "onetime@npm:5.1.2"
|
||||
|
|
@ -3595,6 +3955,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-parse@npm:^1.0.7":
|
||||
version: 1.0.7
|
||||
resolution: "path-parse@npm:1.0.7"
|
||||
checksum: 11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-scurry@npm:^1.10.1":
|
||||
version: 1.10.1
|
||||
resolution: "path-scurry@npm:1.10.1"
|
||||
|
|
@ -3612,6 +3979,115 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"picocolors@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "picocolors@npm:1.0.1"
|
||||
checksum: c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1":
|
||||
version: 2.3.1
|
||||
resolution: "picomatch@npm:2.3.1"
|
||||
checksum: 26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"pify@npm:^2.3.0":
|
||||
version: 2.3.0
|
||||
resolution: "pify@npm:2.3.0"
|
||||
checksum: 551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"pirates@npm:^4.0.1":
|
||||
version: 4.0.6
|
||||
resolution: "pirates@npm:4.0.6"
|
||||
checksum: 00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-import@npm:^15.1.0":
|
||||
version: 15.1.0
|
||||
resolution: "postcss-import@npm:15.1.0"
|
||||
dependencies:
|
||||
postcss-value-parser: "npm:^4.0.0"
|
||||
read-cache: "npm:^1.0.0"
|
||||
resolve: "npm:^1.1.7"
|
||||
peerDependencies:
|
||||
postcss: ^8.0.0
|
||||
checksum: 518aee5c83ea6940e890b0be675a2588db68b2582319f48c3b4e06535a50ea6ee45f7e63e4309f8754473245c47a0372632378d1d73d901310f295a92f26f17b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-js@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "postcss-js@npm:4.0.1"
|
||||
dependencies:
|
||||
camelcase-css: "npm:^2.0.1"
|
||||
peerDependencies:
|
||||
postcss: ^8.4.21
|
||||
checksum: af35d55cb873b0797d3b42529514f5318f447b134541844285c9ac31a17497297eb72296902967911bb737a75163441695737300ce2794e3bd8c70c13a3b106e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-load-config@npm:^4.0.1":
|
||||
version: 4.0.2
|
||||
resolution: "postcss-load-config@npm:4.0.2"
|
||||
dependencies:
|
||||
lilconfig: "npm:^3.0.0"
|
||||
yaml: "npm:^2.3.4"
|
||||
peerDependencies:
|
||||
postcss: ">=8.0.9"
|
||||
ts-node: ">=9.0.0"
|
||||
peerDependenciesMeta:
|
||||
postcss:
|
||||
optional: true
|
||||
ts-node:
|
||||
optional: true
|
||||
checksum: 3d7939acb3570b0e4b4740e483d6e555a3e2de815219cb8a3c8fc03f575a6bde667443aa93369c0be390af845cb84471bf623e24af833260de3a105b78d42519
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-nested@npm:^6.0.1":
|
||||
version: 6.0.1
|
||||
resolution: "postcss-nested@npm:6.0.1"
|
||||
dependencies:
|
||||
postcss-selector-parser: "npm:^6.0.11"
|
||||
peerDependencies:
|
||||
postcss: ^8.2.14
|
||||
checksum: 2a50aa36d5d103c2e471954830489f4c024deed94fa066169101db55171368d5f80b32446b584029e0471feee409293d0b6b1d8ede361f6675ba097e477b3cbd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-selector-parser@npm:^6.0.11":
|
||||
version: 6.1.1
|
||||
resolution: "postcss-selector-parser@npm:6.1.1"
|
||||
dependencies:
|
||||
cssesc: "npm:^3.0.0"
|
||||
util-deprecate: "npm:^1.0.2"
|
||||
checksum: 5608765e033fee35d448e1f607ffbaa750eb86901824a8bc4a911ea8bc137cb82f29239330787427c5d3695afd90d8721e190f211dbbf733e25033d8b3100763
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss-value-parser@npm:^4.0.0":
|
||||
version: 4.2.0
|
||||
resolution: "postcss-value-parser@npm:4.2.0"
|
||||
checksum: f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss@npm:^8.4.23":
|
||||
version: 8.4.39
|
||||
resolution: "postcss@npm:8.4.39"
|
||||
dependencies:
|
||||
nanoid: "npm:^3.3.7"
|
||||
picocolors: "npm:^1.0.1"
|
||||
source-map-js: "npm:^1.2.0"
|
||||
checksum: 16f5ac3c4e32ee76d1582b3c0dcf1a1fdb91334a45ad755eeb881ccc50318fb8d64047de4f1601ac96e30061df203f0f2e2edbdc0bfc49b9c57bc9fb9bedaea3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"postcss@npm:^8.4.26":
|
||||
version: 8.4.27
|
||||
resolution: "postcss@npm:8.4.27"
|
||||
|
|
@ -3654,6 +4130,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"queue-microtask@npm:^1.2.2":
|
||||
version: 1.2.3
|
||||
resolution: "queue-microtask@npm:1.2.3"
|
||||
checksum: 900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-dom@npm:^18.2.0":
|
||||
version: 18.2.0
|
||||
resolution: "react-dom@npm:18.2.0"
|
||||
|
|
@ -3734,6 +4217,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"read-cache@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "read-cache@npm:1.0.0"
|
||||
dependencies:
|
||||
pify: "npm:^2.3.0"
|
||||
checksum: 90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"readable-stream@npm:^3.4.0":
|
||||
version: 3.6.2
|
||||
resolution: "readable-stream@npm:3.6.2"
|
||||
|
|
@ -3745,6 +4237,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"readdirp@npm:~3.6.0":
|
||||
version: 3.6.0
|
||||
resolution: "readdirp@npm:3.6.0"
|
||||
dependencies:
|
||||
picomatch: "npm:^2.2.1"
|
||||
checksum: 6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"regenerator-runtime@npm:^0.13.11":
|
||||
version: 0.13.11
|
||||
resolution: "regenerator-runtime@npm:0.13.11"
|
||||
|
|
@ -3759,6 +4260,32 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"resolve@npm:^1.1.7, resolve@npm:^1.22.2":
|
||||
version: 1.22.8
|
||||
resolution: "resolve@npm:1.22.8"
|
||||
dependencies:
|
||||
is-core-module: "npm:^2.13.0"
|
||||
path-parse: "npm:^1.0.7"
|
||||
supports-preserve-symlinks-flag: "npm:^1.0.0"
|
||||
bin:
|
||||
resolve: bin/resolve
|
||||
checksum: 07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin<compat/resolve>":
|
||||
version: 1.22.8
|
||||
resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin<compat/resolve>::version=1.22.8&hash=c3c19d"
|
||||
dependencies:
|
||||
is-core-module: "npm:^2.13.0"
|
||||
path-parse: "npm:^1.0.7"
|
||||
supports-preserve-symlinks-flag: "npm:^1.0.0"
|
||||
bin:
|
||||
resolve: bin/resolve
|
||||
checksum: 0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"retry@npm:^0.12.0":
|
||||
version: 0.12.0
|
||||
resolution: "retry@npm:0.12.0"
|
||||
|
|
@ -3766,6 +4293,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"reusify@npm:^1.0.4":
|
||||
version: 1.0.4
|
||||
resolution: "reusify@npm:1.0.4"
|
||||
checksum: c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"rollup@npm:^3.25.2":
|
||||
version: 3.27.2
|
||||
resolution: "rollup@npm:3.27.2"
|
||||
|
|
@ -3780,6 +4314,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"run-parallel@npm:^1.1.9":
|
||||
version: 1.2.0
|
||||
resolution: "run-parallel@npm:1.2.0"
|
||||
dependencies:
|
||||
queue-microtask: "npm:^1.2.2"
|
||||
checksum: 200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"rxjs@npm:^7.8.1":
|
||||
version: 7.8.1
|
||||
resolution: "rxjs@npm:7.8.1"
|
||||
|
|
@ -3904,6 +4447,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"source-map-js@npm:^1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "source-map-js@npm:1.2.0"
|
||||
checksum: 7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"source-map-support@npm:0.5.21":
|
||||
version: 0.5.21
|
||||
resolution: "source-map-support@npm:0.5.21"
|
||||
|
|
@ -4010,6 +4560,24 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sucrase@npm:^3.32.0":
|
||||
version: 3.35.0
|
||||
resolution: "sucrase@npm:3.35.0"
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping": "npm:^0.3.2"
|
||||
commander: "npm:^4.0.0"
|
||||
glob: "npm:^10.3.10"
|
||||
lines-and-columns: "npm:^1.1.6"
|
||||
mz: "npm:^2.7.0"
|
||||
pirates: "npm:^4.0.1"
|
||||
ts-interface-checker: "npm:^0.1.9"
|
||||
bin:
|
||||
sucrase: bin/sucrase
|
||||
sucrase-node: bin/sucrase-node
|
||||
checksum: ac85f3359d2c2ecbf5febca6a24ae9bf96c931f05fde533c22a94f59c6a74895e5d5f0e871878dfd59c2697a75ebb04e4b2224ef0bfc24ca1210735c2ec191ef
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"supports-color@npm:^5.3.0":
|
||||
version: 5.5.0
|
||||
resolution: "supports-color@npm:5.5.0"
|
||||
|
|
@ -4037,6 +4605,46 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"supports-preserve-symlinks-flag@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
|
||||
checksum: 6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tailwindcss@npm:^3.4.6":
|
||||
version: 3.4.6
|
||||
resolution: "tailwindcss@npm:3.4.6"
|
||||
dependencies:
|
||||
"@alloc/quick-lru": "npm:^5.2.0"
|
||||
arg: "npm:^5.0.2"
|
||||
chokidar: "npm:^3.5.3"
|
||||
didyoumean: "npm:^1.2.2"
|
||||
dlv: "npm:^1.1.3"
|
||||
fast-glob: "npm:^3.3.0"
|
||||
glob-parent: "npm:^6.0.2"
|
||||
is-glob: "npm:^4.0.3"
|
||||
jiti: "npm:^1.21.0"
|
||||
lilconfig: "npm:^2.1.0"
|
||||
micromatch: "npm:^4.0.5"
|
||||
normalize-path: "npm:^3.0.0"
|
||||
object-hash: "npm:^3.0.0"
|
||||
picocolors: "npm:^1.0.0"
|
||||
postcss: "npm:^8.4.23"
|
||||
postcss-import: "npm:^15.1.0"
|
||||
postcss-js: "npm:^4.0.1"
|
||||
postcss-load-config: "npm:^4.0.1"
|
||||
postcss-nested: "npm:^6.0.1"
|
||||
postcss-selector-parser: "npm:^6.0.11"
|
||||
resolve: "npm:^1.22.2"
|
||||
sucrase: "npm:^3.32.0"
|
||||
bin:
|
||||
tailwind: lib/cli.js
|
||||
tailwindcss: lib/cli.js
|
||||
checksum: 8d82b697ecf41d8cd100ab3369e3cbcb30e350afc5b595a000b201ba666628a68543154297f96c5b2a3f2614f37bb981af4766556ebaae832079fa9a436e8563
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tar@npm:^6.1.11, tar@npm:^6.1.2":
|
||||
version: 6.2.0
|
||||
resolution: "tar@npm:6.2.0"
|
||||
|
|
@ -4051,29 +4659,23 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tldraw-yjs-example@workspace:.":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "tldraw-yjs-example@workspace:."
|
||||
"thenify-all@npm:^1.0.0":
|
||||
version: 1.6.0
|
||||
resolution: "thenify-all@npm:1.6.0"
|
||||
dependencies:
|
||||
"@biomejs/biome": "npm:1.4.1"
|
||||
"@types/react": "npm:^18.2.15"
|
||||
"@types/react-dom": "npm:^18.2.7"
|
||||
"@vitejs/plugin-react": "npm:^4.0.3"
|
||||
concurrently: "npm:^8.2.0"
|
||||
partykit: "npm:0.0.27"
|
||||
react: "npm:^18.2.0"
|
||||
react-dom: "npm:^18.2.0"
|
||||
tldraw: "npm:2.3.0"
|
||||
typescript: "npm:^5.0.2"
|
||||
vite: "npm:^4.4.5"
|
||||
vite-plugin-top-level-await: "npm:^1.3.1"
|
||||
vite-plugin-wasm: "npm:^3.2.2"
|
||||
y-partykit: "npm:0.0.7"
|
||||
y-utility: "npm:0.1.3"
|
||||
y-websocket: "npm:1.5.0"
|
||||
yjs: "npm:^13.6.8"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
thenify: "npm:>= 3.1.0 < 4"
|
||||
checksum: 9b896a22735e8122754fe70f1d65f7ee691c1d70b1f116fda04fea103d0f9b356e3676cb789506e3909ae0486a79a476e4914b0f92472c2e093d206aed4b7d6b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"thenify@npm:>= 3.1.0 < 4":
|
||||
version: 3.3.1
|
||||
resolution: "thenify@npm:3.3.1"
|
||||
dependencies:
|
||||
any-promise: "npm:^1.0.0"
|
||||
checksum: f375aeb2b05c100a456a30bc3ed07ef03a39cbdefe02e0403fb714b8c7e57eeaad1a2f5c4ecfb9ce554ce3db9c2b024eba144843cd9e344566d9fcee73b04767
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tldraw@npm:2.3.0":
|
||||
version: 2.3.0
|
||||
|
|
@ -4108,6 +4710,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"to-regex-range@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "to-regex-range@npm:5.0.1"
|
||||
dependencies:
|
||||
is-number: "npm:^7.0.0"
|
||||
checksum: 487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tree-kill@npm:^1.2.2":
|
||||
version: 1.2.2
|
||||
resolution: "tree-kill@npm:1.2.2"
|
||||
|
|
@ -4117,6 +4728,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ts-interface-checker@npm:^0.1.9":
|
||||
version: 0.1.13
|
||||
resolution: "ts-interface-checker@npm:0.1.13"
|
||||
checksum: 232509f1b84192d07b81d1e9b9677088e590ac1303436da1e92b296e9be8e31ea042e3e1fd3d29b1742ad2c959e95afe30f63117b8f1bc3a3850070a5142fea7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tslib@npm:^2.0.0, tslib@npm:^2.1.0":
|
||||
version: 2.6.1
|
||||
resolution: "tslib@npm:2.6.1"
|
||||
|
|
@ -4223,7 +4841,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"util-deprecate@npm:^1.0.1":
|
||||
"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "util-deprecate@npm:1.0.2"
|
||||
checksum: 41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942
|
||||
|
|
@ -4502,6 +5120,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yaml@npm:^2.3.4":
|
||||
version: 2.4.5
|
||||
resolution: "yaml@npm:2.4.5"
|
||||
bin:
|
||||
yaml: bin.mjs
|
||||
checksum: e1ee78b381e5c710f715cc4082fd10fc82f7f5c92bd6f075771d20559e175616f56abf1c411f545ea0e9e16e4f84a83a50b42764af5f16ec006328ba9476bb31
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yargs-parser@npm:^21.1.1":
|
||||
version: 21.1.1
|
||||
resolution: "yargs-parser@npm:21.1.1"
|
||||
|
|
|
|||
Loading…
Reference in New Issue