@dxos/plugin-debug 0.7.2 → 0.7.3-main.2dd075e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/lib/browser/{DebugSpace-ZLGGNDAR.mjs → DebugSpace-DHKEAMIC.mjs} +3 -3
  2. package/dist/lib/browser/{DebugSpace-ZLGGNDAR.mjs.map → DebugSpace-DHKEAMIC.mjs.map} +2 -2
  3. package/dist/lib/browser/SpaceGenerator-P7ZPQ4N7.mjs +429 -0
  4. package/dist/lib/browser/SpaceGenerator-P7ZPQ4N7.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +35 -34
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  9. package/dist/types/src/components/DebugObjectPanel.d.ts.map +1 -1
  10. package/dist/types/src/components/DebugSpace/DebugSpace.d.ts +1 -1
  11. package/dist/types/src/components/{SurfaceDebug.d.ts → DebugSurface.d.ts} +2 -2
  12. package/dist/types/src/components/{SurfaceDebug.d.ts.map → DebugSurface.d.ts.map} +1 -1
  13. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +7 -0
  14. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -0
  15. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts +9 -0
  16. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +1 -0
  17. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +9 -0
  18. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
  19. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +6 -0
  20. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +1 -0
  21. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts +8 -0
  22. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -0
  23. package/dist/types/src/components/SpaceGenerator/index.d.ts +3 -0
  24. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -0
  25. package/dist/types/src/components/index.d.ts +2 -1
  26. package/dist/types/src/components/index.d.ts.map +1 -1
  27. package/package.json +45 -38
  28. package/src/DebugPlugin.tsx +58 -39
  29. package/src/components/DebugObjectPanel.tsx +2 -1
  30. package/src/components/DebugSpace/DebugSpace.tsx +2 -2
  31. package/src/components/DebugSpace/ObjectCreator.tsx +1 -1
  32. package/src/components/{SurfaceDebug.tsx → DebugSurface.tsx} +1 -1
  33. package/src/components/SpaceGenerator/ObjectGenerator.tsx +178 -0
  34. package/src/components/SpaceGenerator/SchemaTable.tsx +38 -0
  35. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +37 -0
  36. package/src/components/SpaceGenerator/SpaceGenerator.tsx +113 -0
  37. package/src/components/SpaceGenerator/draw-util.ts +124 -0
  38. package/src/components/SpaceGenerator/index.ts +7 -0
  39. package/src/components/index.ts +1 -0
@@ -105,7 +105,7 @@ var ObjectCreator = ({ space, onAddObjects }) => {
105
105
  columns,
106
106
  data: objects
107
107
  }))), /* @__PURE__ */ React.createElement(Toolbar.Root, {
108
- classNames: "p-2"
108
+ classNames: "p-1"
109
109
  }, /* @__PURE__ */ React.createElement(IconButton, {
110
110
  icon: "ph--plus--regular",
111
111
  label: "Create",
@@ -231,7 +231,7 @@ var DebugSpace = ({ space, onAddObjects }) => {
231
231
  value: mutationJitter,
232
232
  onChange: ({ target: { value } }) => setMutationJitter(value)
233
233
  }), /* @__PURE__ */ React2.createElement(IconButton2, {
234
- icon: running ? "ph--hand-palm--regular" : "ph--play--regular",
234
+ icon: running ? "ph--pause-circle--regular" : "ph--play-circle--regular",
235
235
  iconOnly: true,
236
236
  label: "Start/stop",
237
237
  size: 5,
@@ -273,4 +273,4 @@ var DebugSpace_default = DebugSpace;
273
273
  export {
274
274
  DebugSpace_default as default
275
275
  };
276
- //# sourceMappingURL=DebugSpace-ZLGGNDAR.mjs.map
276
+ //# sourceMappingURL=DebugSpace-DHKEAMIC.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/DebugSpace/DebugSpace.tsx", "../../../src/components/DebugSpace/ObjectCreator.tsx", "../../../src/components/DebugSpace/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useContext, useMemo, useState } from 'react';\n\nimport { createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveObject } from '@dxos/echo-schema';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { faker } from '@dxos/random';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useSpaceInvitation } from '@dxos/react-client/echo';\nimport { InvitationEncoder } from '@dxos/react-client/invitations';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { Icon, IconButton, Input, type IconProps, type TextInputProps, Toolbar, useFileDownload } from '@dxos/react-ui';\nimport { safeParseInt } from '@dxos/util';\n\nimport { ObjectCreator } from './ObjectCreator';\nimport { DebugContext } from '../../types';\nimport { Container } from '../Container';\n\nconst DEFAULT_COUNT = 100;\nconst DEFAULT_PERIOD = 500;\nconst DEFAULT_JITTER = 50;\n\nconst useRefresh = (): [any, () => void] => {\n const [update, setUpdate] = useState({});\n return [update, () => setUpdate({})];\n};\n\nconst CustomInput = ({ icon, ...props }: Pick<IconProps, 'icon'> & TextInputProps) => {\n return (\n <div role='none' className='relative'>\n <Input.Root>\n <Input.TextInput classNames='w-[100px] text-right pie-[22px]' size={5} {...props} />\n </Input.Root>\n <Icon icon={icon} size={3} classNames='absolute inline-end-1 block-start-1 mt-[6px]' />\n </div>\n );\n};\n\nexport const DebugSpace: FC<{\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n}> = ({ space, onAddObjects }) => {\n const { connect } = useSpaceInvitation(space?.key);\n const client = useClient();\n const [data, setData] = useState<any>({});\n\n const [update, handleUpdate] = useRefresh();\n useAsyncEffect(\n async (isMounted) => {\n const data = await client.diagnostics({ truncate: true });\n if (isMounted()) {\n setData(\n data?.diagnostics?.spaces?.find(({ key }: any) => {\n return space.key.toHex().startsWith(key);\n }),\n );\n }\n },\n [space, update],\n );\n\n const download = useFileDownload();\n const handleDownload = async () => {\n download(\n new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' }),\n `${new Date().toISOString().replace(/\\W/g, '-')}.json`,\n );\n };\n\n const [mutationCount, setMutationCount] = useState(String(DEFAULT_COUNT));\n const [mutationInterval, setMutationInterval] = useState(String(DEFAULT_PERIOD));\n const [mutationJitter, setMutationJitter] = useState(String(DEFAULT_JITTER));\n\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n // TODO(burdon): Note: this is shared across all spaces!\n const { running, start, stop } = useContext(DebugContext);\n const handleToggleRunning = () => {\n if (running) {\n stop();\n handleUpdate();\n } else {\n start(\n async () => {\n const { objects } = await space.db.query(Filter.schema(DocumentType)).run();\n if (objects.length) {\n const object = faker.helpers.arrayElement(objects);\n await generator.mutateObject(object, { count: 10, mutationSize: 10, maxContentLength: 1000 });\n }\n },\n {\n count: safeParseInt(mutationCount) ?? 0,\n interval: safeParseInt(mutationInterval) ?? 0,\n jitter: safeParseInt(mutationJitter) ?? 0,\n },\n );\n }\n };\n\n const handleCreateInvitation = () => {\n const invitation = space.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n // TODO(burdon): Refactor.\n // TODO(burdon): Unsubscribe?\n connect(invitation);\n const code = InvitationEncoder.encode(invitation.get());\n new URL(window.origin).searchParams.set('spaceInvitationCode', code);\n const url = `${window.origin}?spaceInvitationCode=${code}`;\n void navigator.clipboard.writeText(url);\n };\n\n const handleCreateEpoch = async () => {\n await space.internal.createEpoch();\n handleUpdate();\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <CustomInput\n icon='ph--flag--regular'\n autoComplete='off'\n placeholder='Count'\n value={mutationCount}\n onChange={({ target: { value } }) => setMutationCount(value)}\n />\n <CustomInput\n icon='ph--timer--regular'\n autoComplete='off'\n placeholder='Interval'\n value={mutationInterval}\n onChange={({ target: { value } }) => setMutationInterval(value)}\n />\n <CustomInput\n icon='ph--plus-minus--regular'\n autoComplete='off'\n placeholder='Jitter'\n value={mutationJitter}\n onChange={({ target: { value } }) => setMutationJitter(value)}\n />\n\n <IconButton\n icon={running ? 'ph--hand-palm--regular' : 'ph--play--regular'}\n iconOnly\n label='Start/stop'\n size={5}\n onClick={handleToggleRunning}\n />\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' size={5} onClick={handleUpdate} />\n <IconButton icon='ph--download-simple--regular' iconOnly label='Download' size={5} onClick={handleDownload} />\n\n <Toolbar.Expander />\n <IconButton\n icon='ph--flag-pennant--regular'\n iconOnly\n label='Create epoch'\n size={5}\n onClick={handleCreateEpoch}\n />\n <IconButton\n icon='ph--user-circle-plus--regular'\n iconOnly\n iconClassNames='text-blue-500'\n label='Create Invitation'\n size={5}\n onClick={handleCreateInvitation}\n />\n </Toolbar.Root>\n }\n >\n <ObjectCreator space={space} onAddObjects={onAddObjects} />\n </Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { type MutationsProviderParams, TestSchemaType, createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveEchoObject, type ReactiveObject, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Toolbar } from '@dxos/react-ui';\nimport { createColumnBuilder, type TableColumnDef, Table } from '@dxos/react-ui-table/deprecated';\n\nconst BATCH_SIZE = 10;\n\nexport type CreateObjectsParams = {\n schema: string;\n enabled: boolean;\n objects: number;\n mutations: Pick<MutationsProviderParams, 'count' | 'mutationSize' | 'maxContentLength'>;\n};\n\nexport type ObjectCreatorProps = {\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const ObjectCreator = ({ space, onAddObjects }: ObjectCreatorProps) => {\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n const [objects, setObjects] = useState<CreateObjectsParams[]>(\n Object.values(TestSchemaType).map((schema) => ({\n schema,\n enabled: true,\n objects: 10,\n mutations: {\n count: 10,\n mutationSize: 10,\n maxContentLength: 1000,\n },\n })),\n );\n\n const handleCreate = async () => {\n for (const params of objects) {\n if (!params.enabled) {\n continue;\n }\n\n let objectsCreated = 0;\n while (objectsCreated < params.objects) {\n const objects = (await generator.createObjects({\n [params.schema]: Math.min(BATCH_SIZE, params.objects - objectsCreated),\n })) as ReactiveEchoObject<any>[];\n\n await generator.mutateObjects(objects, params.mutations);\n objectsCreated += objects.length;\n onAddObjects?.(objects);\n }\n }\n\n await space.db.flush();\n };\n\n const handleUpdate = (row: CreateObjectsParams, key: string, value: any) => {\n const newObjects = [...objects];\n Object.assign(newObjects.find((object) => object.schema === row.schema)!, { [key]: value });\n setObjects(newObjects);\n };\n\n const { helper, builder } = createColumnBuilder<CreateObjectsParams>();\n const columns: TableColumnDef<CreateObjectsParams>[] = [\n helper.accessor('enabled', builder.switch({ label: 'Live', onUpdate: handleUpdate })),\n helper.accessor('schema', builder.string({ label: 'Schema', classNames: 'font-mono' })),\n helper.accessor('objects', builder.number({ label: 'Objects', onUpdate: handleUpdate })),\n helper.accessor((obj) => obj.mutations.count, {\n id: 'mutations',\n ...builder.number({ label: 'Mutations', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.mutationSize, {\n id: 'mutationSize',\n ...builder.number({ label: 'Mut. Size', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.maxContentLength, {\n id: 'mutationMaxContentLength',\n ...builder.number({ label: 'Length', onUpdate: handleUpdate }),\n }),\n ];\n\n return (\n <>\n <Table.Root>\n <Table.Viewport>\n <Table.Main<CreateObjectsParams> columns={columns} data={objects} />\n </Table.Viewport>\n </Table.Root>\n <Toolbar.Root classNames='p-2'>\n <IconButton icon='ph--plus--regular' label='Create' onClick={handleCreate} />\n </Toolbar.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugSpace } from './DebugSpace';\n\nexport default DebugSpace;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useContext, useMemo, useState } from 'react';\n\nimport { createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { faker } from '@dxos/random';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useSpaceInvitation } from '@dxos/react-client/echo';\nimport { InvitationEncoder } from '@dxos/react-client/invitations';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { Icon, IconButton, Input, type IconProps, type TextInputProps, Toolbar, useFileDownload } from '@dxos/react-ui';\nimport { safeParseInt } from '@dxos/util';\n\nimport { ObjectCreator } from './ObjectCreator';\nimport { DebugContext } from '../../types';\nimport { Container } from '../Container';\n\nconst DEFAULT_COUNT = 100;\nconst DEFAULT_PERIOD = 500;\nconst DEFAULT_JITTER = 50;\n\nconst useRefresh = (): [any, () => void] => {\n const [update, setUpdate] = useState({});\n return [update, () => setUpdate({})];\n};\n\nconst CustomInput = ({ icon, ...props }: Pick<IconProps, 'icon'> & TextInputProps) => {\n return (\n <div role='none' className='relative'>\n <Input.Root>\n <Input.TextInput classNames='w-[100px] text-right pie-[22px]' size={5} {...props} />\n </Input.Root>\n <Icon icon={icon} size={3} classNames='absolute inline-end-1 block-start-1 mt-[6px]' />\n </div>\n );\n};\n\nexport const DebugSpace: FC<{\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n}> = ({ space, onAddObjects }) => {\n const { connect } = useSpaceInvitation(space?.key);\n const client = useClient();\n const [data, setData] = useState<any>({});\n\n const [update, handleUpdate] = useRefresh();\n useAsyncEffect(\n async (isMounted) => {\n const data = await client.diagnostics({ truncate: true });\n if (isMounted()) {\n setData(\n data?.diagnostics?.spaces?.find(({ key }: any) => {\n return space.key.toHex().startsWith(key);\n }),\n );\n }\n },\n [space, update],\n );\n\n const download = useFileDownload();\n const handleDownload = async () => {\n download(\n new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' }),\n `${new Date().toISOString().replace(/\\W/g, '-')}.json`,\n );\n };\n\n const [mutationCount, setMutationCount] = useState(String(DEFAULT_COUNT));\n const [mutationInterval, setMutationInterval] = useState(String(DEFAULT_PERIOD));\n const [mutationJitter, setMutationJitter] = useState(String(DEFAULT_JITTER));\n\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n // TODO(burdon): Note: this is shared across all spaces!\n const { running, start, stop } = useContext(DebugContext);\n const handleToggleRunning = () => {\n if (running) {\n stop();\n handleUpdate();\n } else {\n start(\n async () => {\n const { objects } = await space.db.query(Filter.schema(DocumentType)).run();\n if (objects.length) {\n const object = faker.helpers.arrayElement(objects);\n await generator.mutateObject(object, { count: 10, mutationSize: 10, maxContentLength: 1000 });\n }\n },\n {\n count: safeParseInt(mutationCount) ?? 0,\n interval: safeParseInt(mutationInterval) ?? 0,\n jitter: safeParseInt(mutationJitter) ?? 0,\n },\n );\n }\n };\n\n const handleCreateInvitation = () => {\n const invitation = space.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n // TODO(burdon): Refactor.\n // TODO(burdon): Unsubscribe?\n connect(invitation);\n const code = InvitationEncoder.encode(invitation.get());\n new URL(window.origin).searchParams.set('spaceInvitationCode', code);\n const url = `${window.origin}?spaceInvitationCode=${code}`;\n void navigator.clipboard.writeText(url);\n };\n\n const handleCreateEpoch = async () => {\n await space.internal.createEpoch();\n handleUpdate();\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <CustomInput\n icon='ph--flag--regular'\n autoComplete='off'\n placeholder='Count'\n value={mutationCount}\n onChange={({ target: { value } }) => setMutationCount(value)}\n />\n <CustomInput\n icon='ph--timer--regular'\n autoComplete='off'\n placeholder='Interval'\n value={mutationInterval}\n onChange={({ target: { value } }) => setMutationInterval(value)}\n />\n <CustomInput\n icon='ph--plus-minus--regular'\n autoComplete='off'\n placeholder='Jitter'\n value={mutationJitter}\n onChange={({ target: { value } }) => setMutationJitter(value)}\n />\n\n <IconButton\n icon={running ? 'ph--pause-circle--regular' : 'ph--play-circle--regular'}\n iconOnly\n label='Start/stop'\n size={5}\n onClick={handleToggleRunning}\n />\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' size={5} onClick={handleUpdate} />\n <IconButton icon='ph--download-simple--regular' iconOnly label='Download' size={5} onClick={handleDownload} />\n\n <Toolbar.Expander />\n <IconButton\n icon='ph--flag-pennant--regular'\n iconOnly\n label='Create epoch'\n size={5}\n onClick={handleCreateEpoch}\n />\n <IconButton\n icon='ph--user-circle-plus--regular'\n iconOnly\n iconClassNames='text-blue-500'\n label='Create Invitation'\n size={5}\n onClick={handleCreateInvitation}\n />\n </Toolbar.Root>\n }\n >\n <ObjectCreator space={space} onAddObjects={onAddObjects} />\n </Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { type MutationsProviderParams, TestSchemaType, createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveEchoObject, type ReactiveObject, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Toolbar } from '@dxos/react-ui';\nimport { createColumnBuilder, type TableColumnDef, Table } from '@dxos/react-ui-table/deprecated';\n\nconst BATCH_SIZE = 10;\n\nexport type CreateObjectsParams = {\n schema: string;\n enabled: boolean;\n objects: number;\n mutations: Pick<MutationsProviderParams, 'count' | 'mutationSize' | 'maxContentLength'>;\n};\n\nexport type ObjectCreatorProps = {\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const ObjectCreator = ({ space, onAddObjects }: ObjectCreatorProps) => {\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n const [objects, setObjects] = useState<CreateObjectsParams[]>(\n Object.values(TestSchemaType).map((schema) => ({\n schema,\n enabled: true,\n objects: 10,\n mutations: {\n count: 10,\n mutationSize: 10,\n maxContentLength: 1000,\n },\n })),\n );\n\n const handleCreate = async () => {\n for (const params of objects) {\n if (!params.enabled) {\n continue;\n }\n\n let objectsCreated = 0;\n while (objectsCreated < params.objects) {\n const objects = (await generator.createObjects({\n [params.schema]: Math.min(BATCH_SIZE, params.objects - objectsCreated),\n })) as ReactiveEchoObject<any>[];\n\n await generator.mutateObjects(objects, params.mutations);\n objectsCreated += objects.length;\n onAddObjects?.(objects);\n }\n }\n\n await space.db.flush();\n };\n\n const handleUpdate = (row: CreateObjectsParams, key: string, value: any) => {\n const newObjects = [...objects];\n Object.assign(newObjects.find((object) => object.schema === row.schema)!, { [key]: value });\n setObjects(newObjects);\n };\n\n const { helper, builder } = createColumnBuilder<CreateObjectsParams>();\n const columns: TableColumnDef<CreateObjectsParams>[] = [\n helper.accessor('enabled', builder.switch({ label: 'Live', onUpdate: handleUpdate })),\n helper.accessor('schema', builder.string({ label: 'Schema', classNames: 'font-mono' })),\n helper.accessor('objects', builder.number({ label: 'Objects', onUpdate: handleUpdate })),\n helper.accessor((obj) => obj.mutations.count, {\n id: 'mutations',\n ...builder.number({ label: 'Mutations', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.mutationSize, {\n id: 'mutationSize',\n ...builder.number({ label: 'Mut. Size', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.maxContentLength, {\n id: 'mutationMaxContentLength',\n ...builder.number({ label: 'Length', onUpdate: handleUpdate }),\n }),\n ];\n\n return (\n <>\n <Table.Root>\n <Table.Viewport>\n <Table.Main<CreateObjectsParams> columns={columns} data={objects} />\n </Table.Viewport>\n </Table.Root>\n <Toolbar.Root classNames='p-1'>\n <IconButton icon='ph--plus--regular' label='Create' onClick={handleCreate} />\n </Toolbar.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugSpace } from './DebugSpace';\n\nexport default DebugSpace;\n"],
5
+ "mappings": "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",
6
6
  "names": ["React", "useContext", "useMemo", "useState", "createSpaceObjectGenerator", "DocumentType", "Invitation", "faker", "useClient", "Filter", "useSpaceInvitation", "InvitationEncoder", "useAsyncEffect", "Icon", "IconButton", "Input", "Toolbar", "useFileDownload", "safeParseInt", "React", "useMemo", "useState", "TestSchemaType", "createSpaceObjectGenerator", "IconButton", "Toolbar", "createColumnBuilder", "Table", "BATCH_SIZE", "ObjectCreator", "space", "onAddObjects", "generator", "useMemo", "createSpaceObjectGenerator", "objects", "setObjects", "useState", "Object", "values", "TestSchemaType", "map", "schema", "enabled", "mutations", "count", "mutationSize", "maxContentLength", "handleCreate", "params", "objectsCreated", "createObjects", "Math", "min", "mutateObjects", "length", "db", "flush", "handleUpdate", "row", "key", "value", "newObjects", "assign", "find", "object", "helper", "builder", "createColumnBuilder", "columns", "accessor", "switch", "label", "onUpdate", "string", "classNames", "number", "obj", "id", "Table", "Root", "Viewport", "Main", "data", "Toolbar", "IconButton", "icon", "onClick", "DEFAULT_COUNT", "DEFAULT_PERIOD", "DEFAULT_JITTER", "useRefresh", "update", "setUpdate", "useState", "CustomInput", "icon", "props", "React", "div", "role", "className", "Input", "Root", "TextInput", "classNames", "size", "Icon", "DebugSpace", "space", "onAddObjects", "connect", "useSpaceInvitation", "key", "client", "useClient", "data", "setData", "handleUpdate", "useAsyncEffect", "isMounted", "diagnostics", "truncate", "spaces", "find", "toHex", "startsWith", "download", "useFileDownload", "handleDownload", "Blob", "JSON", "stringify", "undefined", "type", "Date", "toISOString", "replace", "mutationCount", "setMutationCount", "String", "mutationInterval", "setMutationInterval", "mutationJitter", "setMutationJitter", "generator", "useMemo", "createSpaceObjectGenerator", "running", "start", "stop", "useContext", "DebugContext", "handleToggleRunning", "objects", "db", "query", "Filter", "schema", "DocumentType", "run", "length", "object", "faker", "helpers", "arrayElement", "mutateObject", "count", "mutationSize", "maxContentLength", "safeParseInt", "interval", "jitter", "handleCreateInvitation", "invitation", "share", "Invitation", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "NONE", "multiUse", "code", "InvitationEncoder", "encode", "get", "URL", "window", "origin", "searchParams", "set", "url", "navigator", "clipboard", "writeText", "handleCreateEpoch", "internal", "createEpoch", "Container", "toolbar", "Toolbar", "autoComplete", "placeholder", "value", "onChange", "target", "IconButton", "iconOnly", "label", "onClick", "Expander", "iconClassNames", "ObjectCreator", "DebugSpace"]
7
7
  }
@@ -0,0 +1,429 @@
1
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/SpaceGenerator.tsx
2
+ import React2, { useCallback, useMemo, useState } from "react";
3
+ import { DocumentType as DocumentType2 } from "@dxos/plugin-markdown/types";
4
+ import { SheetType as SheetType2 } from "@dxos/plugin-sheet/types";
5
+ import { DiagramType as DiagramType2 } from "@dxos/plugin-sketch/types";
6
+ import { useClient } from "@dxos/react-client";
7
+ import { getTypename } from "@dxos/react-client/echo";
8
+ import { IconButton as IconButton2, Input, Toolbar, useAsyncEffect } from "@dxos/react-ui";
9
+ import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
10
+ import { Testing } from "@dxos/schema/testing";
11
+ import { jsonKeyReplacer, sortKeys } from "@dxos/util";
12
+
13
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/ObjectGenerator.tsx
14
+ import { createTLStore, defaultBindingUtils, defaultShapeUtils, defaultShapeTools, defaultTools, Editor } from "@tldraw/tldraw";
15
+ import { create } from "@dxos/live-object";
16
+ import { DocumentType, TextType } from "@dxos/plugin-markdown/types";
17
+ import { addressToA1Notation, createSheet } from "@dxos/plugin-sheet";
18
+ import { SheetType } from "@dxos/plugin-sheet/types";
19
+ import { TLDRAW_SCHEMA, CanvasType, DiagramType } from "@dxos/plugin-sketch/types";
20
+ import { faker as faker2 } from "@dxos/random";
21
+ import { Filter } from "@dxos/react-client/echo";
22
+ import { TableType } from "@dxos/react-ui-table";
23
+ import { createView } from "@dxos/schema";
24
+ import { createAsyncGenerator } from "@dxos/schema/testing";
25
+ import { range as range2 } from "@dxos/util";
26
+
27
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/draw-util.ts
28
+ import { Graph } from "@antv/graphlib";
29
+ import { D3ForceLayout } from "@antv/layout";
30
+ import { createBindingId, createShapeId } from "@tldraw/tldraw";
31
+ import { invariant } from "@dxos/invariant";
32
+ import { faker } from "@dxos/random";
33
+ import { range } from "@dxos/util";
34
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-debug/src/components/SpaceGenerator/draw-util.ts";
35
+ var generateGraph = () => {
36
+ const nodes = range(faker.number.int({
37
+ min: 8,
38
+ max: 32
39
+ })).map(() => ({
40
+ id: faker.string.uuid(),
41
+ data: {
42
+ label: faker.lorem.words(2).split(" ").map((word) => word.charAt(0).toUpperCase()).join("-")
43
+ }
44
+ }));
45
+ const edges = range(faker.number.int({
46
+ min: nodes.length,
47
+ max: nodes.length * 2
48
+ })).map(() => {
49
+ invariant(nodes.length >= 2, void 0, {
50
+ F: __dxlog_file,
51
+ L: 40,
52
+ S: void 0,
53
+ A: [
54
+ "nodes.length >= 2",
55
+ ""
56
+ ]
57
+ });
58
+ let source;
59
+ let target;
60
+ do {
61
+ source = faker.helpers.arrayElement(nodes);
62
+ target = faker.helpers.arrayElement(nodes);
63
+ } while (source.id === target.id);
64
+ return {
65
+ id: faker.string.uuid(),
66
+ source: source.id,
67
+ target: target.id,
68
+ data: {}
69
+ };
70
+ });
71
+ return new Graph({
72
+ nodes,
73
+ edges
74
+ });
75
+ };
76
+ var drawGraph = async (editor, graph) => {
77
+ const grid = 40;
78
+ const nodeSize = 80;
79
+ const snap = (n) => Math.round(n / grid) * grid;
80
+ const layout = new D3ForceLayout({
81
+ center: [
82
+ 0,
83
+ 0
84
+ ],
85
+ preventOverlap: true,
86
+ collideStrength: 0.5,
87
+ linkDistance: grid * 2,
88
+ nodeSize,
89
+ nodeSpacing: nodeSize
90
+ });
91
+ const { nodes, edges } = await layout.execute(graph);
92
+ for (const node of nodes) {
93
+ const id = createShapeId(node.id);
94
+ editor.createShape({
95
+ id,
96
+ type: "geo",
97
+ x: snap(node.data.x),
98
+ y: snap(node.data.y),
99
+ props: {
100
+ w: nodeSize,
101
+ h: nodeSize,
102
+ text: node.data.label
103
+ }
104
+ });
105
+ }
106
+ for (const edge of edges) {
107
+ const arrowId = createShapeId(edge.id);
108
+ editor.createShape({
109
+ id: arrowId,
110
+ type: "arrow"
111
+ });
112
+ editor.createBinding({
113
+ id: createBindingId(),
114
+ type: "arrow",
115
+ fromId: arrowId,
116
+ toId: createShapeId(edge.source),
117
+ props: {
118
+ terminal: "start",
119
+ isExact: false,
120
+ isPrecise: false,
121
+ normalizedAnchor: {
122
+ x: 0.5,
123
+ y: 0.5
124
+ }
125
+ }
126
+ });
127
+ editor.createBinding({
128
+ id: createBindingId(),
129
+ type: "arrow",
130
+ fromId: arrowId,
131
+ toId: createShapeId(edge.target),
132
+ props: {
133
+ terminal: "end",
134
+ isExact: false,
135
+ isPrecise: false,
136
+ normalizedAnchor: {
137
+ x: 0.5,
138
+ y: 0.5
139
+ }
140
+ }
141
+ });
142
+ }
143
+ const data = editor.store.getStoreSnapshot();
144
+ const content = JSON.parse(JSON.stringify(data.store));
145
+ return content;
146
+ };
147
+
148
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/ObjectGenerator.tsx
149
+ var generator = faker2;
150
+ var staticGenerators = /* @__PURE__ */ new Map([
151
+ //
152
+ // DocumentType
153
+ //
154
+ [
155
+ DocumentType.typename,
156
+ async (space, n, cb) => {
157
+ const objects = range2(n).map(() => {
158
+ const content = range2(faker2.number.int({
159
+ min: 3,
160
+ max: 8
161
+ })).map(() => faker2.lorem.sentences(faker2.number.int({
162
+ min: 3,
163
+ max: 16
164
+ }))).join("\n\n");
165
+ const obj = space.db.add(create(DocumentType, {
166
+ name: faker2.commerce.productName(),
167
+ content: create(TextType, {
168
+ content
169
+ }),
170
+ threads: []
171
+ }));
172
+ return obj;
173
+ });
174
+ cb?.(objects);
175
+ return objects;
176
+ }
177
+ ],
178
+ //
179
+ // DiagramType
180
+ //
181
+ [
182
+ DiagramType.typename,
183
+ async (space, n, cb) => {
184
+ const options = {
185
+ bindingUtils: defaultBindingUtils,
186
+ shapeUtils: defaultShapeUtils,
187
+ tools: [
188
+ ...defaultTools,
189
+ ...defaultShapeTools
190
+ ],
191
+ getContainer: () => document.body
192
+ };
193
+ const objects = await Promise.all(range2(n).map(async () => {
194
+ const store = createTLStore();
195
+ const editor = new Editor({
196
+ ...options,
197
+ store
198
+ });
199
+ const graph = generateGraph();
200
+ const content = await drawGraph(editor, graph);
201
+ editor.dispose();
202
+ store.dispose();
203
+ const obj = space.db.add(create(DiagramType, {
204
+ name: faker2.commerce.productName(),
205
+ canvas: create(CanvasType, {
206
+ schema: TLDRAW_SCHEMA,
207
+ content
208
+ })
209
+ }));
210
+ return obj;
211
+ }));
212
+ cb?.(objects);
213
+ return objects;
214
+ }
215
+ ],
216
+ //
217
+ // SheetType
218
+ //
219
+ [
220
+ SheetType.typename,
221
+ async (space, n, cb) => {
222
+ const objects = range2(n).map(() => {
223
+ const year = (/* @__PURE__ */ new Date()).getFullYear();
224
+ const cols = 4;
225
+ const rows = 20;
226
+ const cells = {};
227
+ for (let col = 1; col <= cols; col++) {
228
+ for (let row = 1; row <= 10; row++) {
229
+ const cell = addressToA1Notation({
230
+ col,
231
+ row
232
+ });
233
+ if (row === 1) {
234
+ cells[cell] = {
235
+ value: `${year} Q${col}`
236
+ };
237
+ } else if (row === rows) {
238
+ const from = addressToA1Notation({
239
+ col,
240
+ row: 2
241
+ });
242
+ const to = addressToA1Notation({
243
+ col,
244
+ row: rows - 1
245
+ });
246
+ cells[cell] = {
247
+ value: `=SUM(${from}:${to})`
248
+ };
249
+ } else if (row > 2 && row < rows - 1) {
250
+ cells[cell] = {
251
+ value: Math.floor(Math.random() * 1e4)
252
+ };
253
+ }
254
+ }
255
+ }
256
+ return space.db.add(createSheet({
257
+ name: faker2.commerce.productName(),
258
+ cells
259
+ }));
260
+ });
261
+ cb?.(objects);
262
+ return objects;
263
+ }
264
+ ]
265
+ ]);
266
+ var createGenerator = (type) => {
267
+ return async (space, n, cb) => {
268
+ const mutableSchema = await space.db.schemaRegistry.query();
269
+ const schema = mutableSchema.find((schema2) => schema2.typename === type.typename) ?? space.db.schemaRegistry.addSchema(type);
270
+ const generate = createAsyncGenerator(generator, schema.schema, space.db);
271
+ const objects = await generate.createObjects(n);
272
+ const { objects: tables } = await space.db.query(Filter.schema(TableType)).run();
273
+ const table = tables.find((table2) => table2.view?.query?.typename === type.typename);
274
+ if (!table) {
275
+ const name = type.typename.split("/").pop() ?? type.typename;
276
+ const view = createView({
277
+ name,
278
+ typename: type.typename,
279
+ jsonSchema: schema.jsonSchema
280
+ });
281
+ const table2 = space.db.add(create(TableType, {
282
+ name,
283
+ view
284
+ }));
285
+ cb?.([
286
+ table2
287
+ ]);
288
+ }
289
+ return objects;
290
+ };
291
+ };
292
+
293
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/SchemaTable.tsx
294
+ import React from "react";
295
+ import { IconButton } from "@dxos/react-ui";
296
+ var SchemaTable = ({ types, objects = {}, label, onClick }) => {
297
+ return /* @__PURE__ */ React.createElement("div", {
298
+ className: "grid grid-cols-[1fr_80px_40px] gap-1 overflow-hidden"
299
+ }, /* @__PURE__ */ React.createElement("div", {
300
+ className: "grid grid-cols-subgrid col-span-3"
301
+ }, /* @__PURE__ */ React.createElement("div", {
302
+ className: "px-2 text-sm text-primary-500"
303
+ }, label), /* @__PURE__ */ React.createElement("div", {
304
+ className: "px-2 text-xs text-subdued text-right"
305
+ }, "count")), types.map((type) => /* @__PURE__ */ React.createElement("div", {
306
+ key: type.typename,
307
+ className: "grid grid-cols-subgrid col-span-3 items-center"
308
+ }, /* @__PURE__ */ React.createElement("div", {
309
+ className: "px-2 text-sm font-mono text-green-500"
310
+ }, type.typename), /* @__PURE__ */ React.createElement("div", {
311
+ className: "px-2 text-right font-mono"
312
+ }, objects[type.typename] ?? 0), /* @__PURE__ */ React.createElement(IconButton, {
313
+ variant: "ghost",
314
+ icon: "ph--plus--regular",
315
+ iconOnly: true,
316
+ label: "Create data",
317
+ onClick: () => onClick(type.typename)
318
+ }))));
319
+ };
320
+
321
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/SpaceGenerator.tsx
322
+ var SpaceGenerator = ({ space, onCreateObjects }) => {
323
+ const client = useClient();
324
+ const staticTypes = [
325
+ DocumentType2,
326
+ DiagramType2,
327
+ SheetType2
328
+ ];
329
+ const mutableTypes = [
330
+ Testing.OrgType,
331
+ Testing.ProjectType,
332
+ Testing.ContactType
333
+ ];
334
+ const [count, setCount] = useState(1);
335
+ const [info, setInfo] = useState({});
336
+ const typeMap = useMemo(() => {
337
+ client.addTypes(staticTypes);
338
+ const mutableGenerators = new Map(mutableTypes.map((type) => [
339
+ type.typename,
340
+ createGenerator(type)
341
+ ]));
342
+ return new Map([
343
+ ...staticGenerators,
344
+ ...mutableGenerators
345
+ ]);
346
+ }, [
347
+ client,
348
+ mutableTypes
349
+ ]);
350
+ const updateInfo = async () => {
351
+ const mutableSchema = await space.db.schemaRegistry.query();
352
+ const staticSchema = space.db.graph.schemaRegistry.schemas;
353
+ const { objects } = await space.db.query().run();
354
+ const objectMap = sortKeys(objects.reduce((map, obj) => {
355
+ const type = getTypename(obj);
356
+ if (type) {
357
+ const count2 = map[type] ?? 0;
358
+ map[type] = count2 + 1;
359
+ }
360
+ return map;
361
+ }, {}));
362
+ setInfo({
363
+ schema: {
364
+ static: staticSchema.length,
365
+ mutable: mutableSchema.length
366
+ },
367
+ objects: objectMap
368
+ });
369
+ };
370
+ useAsyncEffect(updateInfo, [
371
+ space
372
+ ]);
373
+ const handleCreateData = useCallback(async (typename) => {
374
+ const constructor = typeMap.get(typename);
375
+ if (constructor) {
376
+ await constructor(space, count, onCreateObjects);
377
+ await updateInfo();
378
+ }
379
+ }, [
380
+ typeMap,
381
+ count
382
+ ]);
383
+ return /* @__PURE__ */ React2.createElement("div", {
384
+ role: "none",
385
+ className: "flex flex-col divide-y divide-separator"
386
+ }, /* @__PURE__ */ React2.createElement(Toolbar.Root, {
387
+ classNames: "p-1"
388
+ }, /* @__PURE__ */ React2.createElement(IconButton2, {
389
+ icon: "ph--arrow-clockwise--regular",
390
+ iconOnly: true,
391
+ label: "Refresh",
392
+ onClick: updateInfo
393
+ }), /* @__PURE__ */ React2.createElement(Toolbar.Expander, null), /* @__PURE__ */ React2.createElement("div", {
394
+ className: "flex"
395
+ }, /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement(Input.TextInput, {
396
+ type: "number",
397
+ min: 1,
398
+ max: 100,
399
+ placeholder: "Count",
400
+ classNames: "w-[80px]",
401
+ value: count,
402
+ onChange: (ev) => setCount(parseInt(ev.target.value))
403
+ })))), /* @__PURE__ */ React2.createElement(SchemaTable, {
404
+ types: staticTypes,
405
+ objects: info.objects,
406
+ label: "Static Types",
407
+ onClick: handleCreateData
408
+ }), /* @__PURE__ */ React2.createElement(SchemaTable, {
409
+ types: mutableTypes,
410
+ objects: info.objects,
411
+ label: "Mutable Types",
412
+ onClick: handleCreateData
413
+ }), /* @__PURE__ */ React2.createElement(SyntaxHighlighter, {
414
+ classNames: "flex text-xs",
415
+ language: "json"
416
+ }, JSON.stringify({
417
+ space,
418
+ ...info
419
+ }, jsonKeyReplacer({
420
+ truncate: true
421
+ }), 2)));
422
+ };
423
+
424
+ // packages/plugins/plugin-debug/src/components/SpaceGenerator/index.ts
425
+ var SpaceGenerator_default = SpaceGenerator;
426
+ export {
427
+ SpaceGenerator_default as default
428
+ };
429
+ //# sourceMappingURL=SpaceGenerator-P7ZPQ4N7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/SpaceGenerator/SpaceGenerator.tsx", "../../../src/components/SpaceGenerator/ObjectGenerator.tsx", "../../../src/components/SpaceGenerator/draw-util.ts", "../../../src/components/SpaceGenerator/SchemaTable.tsx", "../../../src/components/SpaceGenerator/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { SheetType } from '@dxos/plugin-sheet/types';\nimport { DiagramType } from '@dxos/plugin-sketch/types';\nimport { useClient } from '@dxos/react-client';\nimport { getTypename, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, Toolbar, useAsyncEffect } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { Testing } from '@dxos/schema/testing';\nimport { jsonKeyReplacer, sortKeys } from '@dxos/util';\n\nimport { type ObjectGenerator, createGenerator, staticGenerators } from './ObjectGenerator';\nimport { SchemaTable } from './SchemaTable';\n\nexport type SpaceGeneratorProps = {\n space: Space;\n onCreateObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const SpaceGenerator = ({ space, onCreateObjects }: SpaceGeneratorProps) => {\n const client = useClient();\n const staticTypes = [DocumentType, DiagramType, SheetType]; // TODO(burdon): Make extensible.\n const mutableTypes = [Testing.OrgType, Testing.ProjectType, Testing.ContactType];\n const [count, setCount] = useState(1);\n const [info, setInfo] = useState<any>({});\n\n // Create type generators.\n const typeMap = useMemo(() => {\n client.addTypes(staticTypes);\n const mutableGenerators = new Map<string, ObjectGenerator<any>>(\n mutableTypes.map((type) => [type.typename, createGenerator(type)]),\n );\n\n return new Map([...staticGenerators, ...mutableGenerators]);\n }, [client, mutableTypes]);\n\n // Query space to get info.\n const updateInfo = async () => {\n // Create schema map.\n const mutableSchema = await space.db.schemaRegistry.query();\n const staticSchema = space.db.graph.schemaRegistry.schemas;\n\n // Create object map.\n const { objects } = await space.db.query().run();\n const objectMap = sortKeys(\n objects.reduce<Record<string, number>>((map, obj) => {\n const type = getTypename(obj);\n if (type) {\n const count = map[type] ?? 0;\n map[type] = count + 1;\n }\n return map;\n }, {}),\n );\n\n setInfo({\n schema: {\n static: staticSchema.length,\n mutable: mutableSchema.length,\n },\n objects: objectMap,\n });\n };\n\n useAsyncEffect(updateInfo, [space]);\n\n const handleCreateData = useCallback(\n async (typename: string) => {\n const constructor = typeMap.get(typename);\n if (constructor) {\n // TODO(burdon): Input to specify number of objects.\n await constructor(space, count, onCreateObjects);\n await updateInfo();\n }\n },\n [typeMap, count],\n );\n\n return (\n <div role='none' className='flex flex-col divide-y divide-separator'>\n <Toolbar.Root classNames='p-1'>\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />\n <Toolbar.Expander />\n <div className='flex'>\n <Input.Root>\n <Input.TextInput\n type='number'\n min={1}\n max={100}\n placeholder={'Count'}\n classNames='w-[80px]'\n value={count}\n onChange={(ev) => setCount(parseInt(ev.target.value))}\n />\n </Input.Root>\n </div>\n </Toolbar.Root>\n\n <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />\n <SchemaTable types={mutableTypes} objects={info.objects} label='Mutable Types' onClick={handleCreateData} />\n\n <SyntaxHighlighter classNames='flex text-xs' language='json'>\n {JSON.stringify({ space, ...info }, jsonKeyReplacer({ truncate: true }), 2)}\n </SyntaxHighlighter>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n createTLStore,\n defaultBindingUtils,\n defaultShapeUtils,\n defaultShapeTools,\n defaultTools,\n Editor,\n type TLEditorOptions,\n} from '@tldraw/tldraw';\n\nimport { type AbstractSchema, type BaseObject } from '@dxos/echo-schema';\nimport { create, type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType, TextType } from '@dxos/plugin-markdown/types';\nimport { addressToA1Notation, createSheet } from '@dxos/plugin-sheet';\nimport { type CellValue } from '@dxos/plugin-sheet/types';\nimport { SheetType } from '@dxos/plugin-sheet/types';\nimport { TLDRAW_SCHEMA, CanvasType, DiagramType } from '@dxos/plugin-sketch/types';\nimport { faker } from '@dxos/random';\nimport { Filter, type Space } from '@dxos/react-client/echo';\nimport { TableType } from '@dxos/react-ui-table';\nimport { createView } from '@dxos/schema';\nimport { createAsyncGenerator, type ValueGenerator } from '@dxos/schema/testing';\nimport { range } from '@dxos/util';\n\nimport { drawGraph, generateGraph } from './draw-util';\n\nconst generator: ValueGenerator = faker as any;\n\n// TODO(burdon): Add objects to collections.\n// TODO(burdon): Create comments.\n// TODO(burdon): Reuse in testbench-app.\n// TODO(burdon): Mutator running in background (factor out): from echo-generator.\n\nexport type ObjectGenerator<T extends BaseObject> = (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n) => Promise<ReactiveObject<T>[]>;\n\n// TODO(burdon): Factor out and create unit tests. See \"fuzz\" patterns.\nexport const staticGenerators = new Map<string, ObjectGenerator<any>>([\n //\n // DocumentType\n //\n [\n DocumentType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n const content = range(faker.number.int({ min: 3, max: 8 }))\n .map(() => faker.lorem.sentences(faker.number.int({ min: 3, max: 16 })))\n .join('\\n\\n');\n\n const obj = space.db.add(\n create(DocumentType, {\n name: faker.commerce.productName(),\n content: create(TextType, { content }),\n threads: [],\n }),\n );\n\n return obj;\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n //\n // DiagramType\n //\n [\n DiagramType.typename,\n async (space, n, cb) => {\n const options: Pick<TLEditorOptions, 'bindingUtils' | 'shapeUtils' | 'tools' | 'getContainer'> = {\n bindingUtils: defaultBindingUtils,\n shapeUtils: defaultShapeUtils,\n tools: [...defaultTools, ...defaultShapeTools],\n getContainer: () => document.body, // TODO(burdon): Fake via JSDOM?\n };\n\n const objects = await Promise.all(\n range(n).map(async () => {\n const store = createTLStore();\n const editor = new Editor({ ...options, store });\n const graph = generateGraph();\n const content = await drawGraph(editor, graph);\n editor.dispose();\n store.dispose();\n\n const obj = space.db.add(\n create(DiagramType, {\n name: faker.commerce.productName(),\n canvas: create(CanvasType, { schema: TLDRAW_SCHEMA, content }),\n }),\n );\n\n return obj;\n }),\n );\n\n cb?.(objects);\n return objects;\n },\n ],\n //\n // SheetType\n //\n [\n SheetType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n // TODO(burdon): Reconcile with plugin-sheet/testing\n const year = new Date().getFullYear();\n const cols = 4;\n const rows = 20;\n const cells: Record<string, CellValue> = {};\n for (let col = 1; col <= cols; col++) {\n for (let row = 1; row <= 10; row++) {\n const cell = addressToA1Notation({ col, row });\n if (row === 1) {\n cells[cell] = { value: `${year} Q${col}` };\n } else if (row === rows) {\n const from = addressToA1Notation({ col, row: 2 });\n const to = addressToA1Notation({ col, row: rows - 1 });\n cells[cell] = { value: `=SUM(${from}:${to})` };\n } else if (row > 2 && row < rows - 1) {\n cells[cell] = { value: Math.floor(Math.random() * 10_000) };\n }\n }\n }\n\n // TODO(burdon): Set width.\n return space.db.add(\n createSheet({\n name: faker.commerce.productName(),\n cells,\n }),\n );\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n]);\n\nexport const createGenerator = <T extends BaseObject>(type: AbstractSchema<T>): ObjectGenerator<T> => {\n return async (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n ): Promise<ReactiveObject<T>[]> => {\n // Find or create mutable schema.\n const mutableSchema = await space.db.schemaRegistry.query();\n const schema =\n mutableSchema.find((schema) => schema.typename === type.typename) ?? space.db.schemaRegistry.addSchema(type);\n\n // Create objects.\n const generate = createAsyncGenerator(generator, schema.schema, space.db);\n const objects = await generate.createObjects(n);\n\n // Find or create table and view.\n const { objects: tables } = await space.db.query(Filter.schema(TableType)).run();\n const table = tables.find((table) => table.view?.query?.typename === type.typename);\n if (!table) {\n const name = type.typename.split('/').pop() ?? type.typename;\n const view = createView({ name, typename: type.typename, jsonSchema: schema.jsonSchema });\n const table = space.db.add(create(TableType, { name, view }));\n cb?.([table]);\n }\n\n return objects;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): workerize-loader dep.\nimport { Graph, type Node, type PlainObject } from '@antv/graphlib';\nimport { D3ForceLayout } from '@antv/layout';\nimport { createBindingId, createShapeId, type Editor, type SerializedStore, type TLRecord } from '@tldraw/tldraw';\n\nimport { invariant } from '@dxos/invariant';\nimport { faker } from '@dxos/random';\nimport { range } from '@dxos/util';\n\n// TODO(burdon): Graph layout:\n// - https://www.npmjs.com/package/@antv/layout (uses d3)\n// - https://observablehq.com/d/2db6b0cc5e97d8d6\n// - https://github.com/antvis/graphlib\n// - https://www.npmjs.com/package/@dagrejs/dagre\n// - https://github.com/dagrejs/dagre/wiki\n// - https://www.npmjs.com/package/elkjs\n\n/**\n * https://github.com/antvis/graphlib/blob/master/docs/classes/Graph.md\n */\n// TODO(burdon): Factor out.\n// TODO(burdon): Map ECHO to Graph.\nexport const generateGraph = (): Graph<PlainObject, PlainObject> => {\n const nodes = range(faker.number.int({ min: 8, max: 32 })).map(() => ({\n id: faker.string.uuid(),\n data: {\n label: faker.lorem\n .words(2)\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase())\n .join('-'),\n },\n }));\n\n const edges = range(faker.number.int({ min: nodes.length, max: nodes.length * 2 })).map(() => {\n invariant(nodes.length >= 2);\n let source: Node<PlainObject>;\n let target: Node<PlainObject>;\n do {\n source = faker.helpers.arrayElement(nodes);\n target = faker.helpers.arrayElement(nodes);\n } while (source.id === target.id);\n\n return { id: faker.string.uuid(), source: source.id, target: target.id, data: {} };\n });\n\n return new Graph<PlainObject, PlainObject>({ nodes, edges });\n};\n\nexport const drawGraph = async (\n editor: Editor,\n graph: Graph<PlainObject, PlainObject>,\n): Promise<SerializedStore<TLRecord>> => {\n const grid = 40;\n const nodeSize = 80;\n\n const snap = (n: number) => Math.round(n / grid) * grid;\n\n const layout = new D3ForceLayout({\n center: [0, 0],\n preventOverlap: true,\n collideStrength: 0.5,\n linkDistance: grid * 2,\n nodeSize,\n nodeSpacing: nodeSize,\n });\n const { nodes, edges } = await layout.execute(graph);\n\n for (const node of nodes) {\n const id = createShapeId(node.id as string);\n editor.createShape({\n id,\n type: 'geo',\n x: snap(node.data.x),\n y: snap(node.data.y),\n props: {\n w: nodeSize,\n h: nodeSize,\n text: node.data.label,\n },\n });\n }\n\n for (const edge of edges) {\n const arrowId = createShapeId(edge.id as string);\n editor.createShape({ id: arrowId, type: 'arrow' });\n\n editor.createBinding({\n id: createBindingId(),\n type: 'arrow',\n fromId: arrowId,\n toId: createShapeId(edge.source as string),\n props: {\n terminal: 'start',\n isExact: false,\n isPrecise: false,\n normalizedAnchor: { x: 0.5, y: 0.5 },\n },\n });\n\n editor.createBinding({\n id: createBindingId(),\n type: 'arrow',\n fromId: arrowId,\n toId: createShapeId(edge.target as string),\n props: {\n terminal: 'end',\n isExact: false,\n isPrecise: false,\n normalizedAnchor: { x: 0.5, y: 0.5 },\n },\n });\n }\n\n const data = editor.store.getStoreSnapshot();\n // TODO(burdon): Strip readonly properties (e.g., `meta`). Factor out.\n const content: SerializedStore<TLRecord> = JSON.parse(JSON.stringify(data.store));\n\n return content;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton } from '@dxos/react-ui';\n\nexport type SchemaTableProps = {\n types: any[];\n objects?: Record<string, number | undefined>;\n label: string;\n onClick: (typename: string) => void;\n};\n\nexport const SchemaTable = ({ types, objects = {}, label, onClick }: SchemaTableProps) => {\n return (\n <div className='grid grid-cols-[1fr_80px_40px] gap-1 overflow-hidden'>\n <div className='grid grid-cols-subgrid col-span-3'>\n <div className='px-2 text-sm text-primary-500'>{label}</div>\n <div className='px-2 text-xs text-subdued text-right'>count</div>\n </div>\n {types.map((type) => (\n <div key={type.typename} className='grid grid-cols-subgrid col-span-3 items-center'>\n <div className='px-2 text-sm font-mono text-green-500'>{type.typename}</div>\n <div className='px-2 text-right font-mono'>{objects[type.typename] ?? 0}</div>\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n iconOnly\n label='Create data'\n onClick={() => onClick(type.typename)}\n />\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SpaceGenerator } from './SpaceGenerator';\n\nexport default SpaceGenerator;\n"],
5
+ "mappings": ";AAIA,OAAOA,UAASC,aAAaC,SAASC,gBAAgB;AAGtD,SAASC,gBAAAA,qBAAoB;AAC7B,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,eAAAA,oBAAmB;AAC5B,SAASC,iBAAiB;AAC1B,SAASC,mBAA+B;AACxC,SAASC,cAAAA,aAAYC,OAAOC,SAASC,sBAAsB;AAC3D,SAASC,yBAAyB;AAClC,SAASC,eAAe;AACxB,SAASC,iBAAiBC,gBAAgB;;;ACX1C,SACEC,eACAC,qBACAC,mBACAC,mBACAC,cACAC,cAEK;AAGP,SAASC,cAAmC;AAC5C,SAASC,cAAcC,gBAAgB;AACvC,SAASC,qBAAqBC,mBAAmB;AAEjD,SAASC,iBAAiB;AAC1B,SAASC,eAAeC,YAAYC,mBAAmB;AACvD,SAASC,SAAAA,cAAa;AACtB,SAASC,cAA0B;AACnC,SAASC,iBAAiB;AAC1B,SAASC,kBAAkB;AAC3B,SAASC,4BAAiD;AAC1D,SAASC,SAAAA,cAAa;;;ACrBtB,SAASC,aAA0C;AACnD,SAASC,qBAAqB;AAC9B,SAASC,iBAAiBC,qBAAuE;AAEjG,SAASC,iBAAiB;AAC1B,SAASC,aAAa;AACtB,SAASC,aAAa;;AAef,IAAMC,gBAAgB,MAAA;AAC3B,QAAMC,QAAQF,MAAMD,MAAMI,OAAOC,IAAI;IAAEC,KAAK;IAAGC,KAAK;EAAG,CAAA,CAAA,EAAIC,IAAI,OAAO;IACpEC,IAAIT,MAAMU,OAAOC,KAAI;IACrBC,MAAM;MACJC,OAAOb,MAAMc,MACVC,MAAM,CAAA,EACNC,MAAM,GAAA,EACNR,IAAI,CAACS,SAASA,KAAKC,OAAO,CAAA,EAAGC,YAAW,CAAA,EACxCC,KAAK,GAAA;IACV;EACF,EAAA;AAEA,QAAMC,QAAQpB,MAAMD,MAAMI,OAAOC,IAAI;IAAEC,KAAKH,MAAMmB;IAAQf,KAAKJ,MAAMmB,SAAS;EAAE,CAAA,CAAA,EAAId,IAAI,MAAA;AACtFT,cAAUI,MAAMmB,UAAU,GAAA,QAAA;;;;;;;;;AAC1B,QAAIC;AACJ,QAAIC;AACJ,OAAG;AACDD,eAASvB,MAAMyB,QAAQC,aAAavB,KAAAA;AACpCqB,eAASxB,MAAMyB,QAAQC,aAAavB,KAAAA;IACtC,SAASoB,OAAOd,OAAOe,OAAOf;AAE9B,WAAO;MAAEA,IAAIT,MAAMU,OAAOC,KAAI;MAAIY,QAAQA,OAAOd;MAAIe,QAAQA,OAAOf;MAAIG,MAAM,CAAC;IAAE;EACnF,CAAA;AAEA,SAAO,IAAIjB,MAAgC;IAAEQ;IAAOkB;EAAM,CAAA;AAC5D;AAEO,IAAMM,YAAY,OACvBC,QACAC,UAAAA;AAEA,QAAMC,OAAO;AACb,QAAMC,WAAW;AAEjB,QAAMC,OAAO,CAACC,MAAcC,KAAKC,MAAMF,IAAIH,IAAAA,IAAQA;AAEnD,QAAMM,SAAS,IAAIxC,cAAc;IAC/ByC,QAAQ;MAAC;MAAG;;IACZC,gBAAgB;IAChBC,iBAAiB;IACjBC,cAAcV,OAAO;IACrBC;IACAU,aAAaV;EACf,CAAA;AACA,QAAM,EAAE5B,OAAOkB,MAAK,IAAK,MAAMe,OAAOM,QAAQb,KAAAA;AAE9C,aAAWc,QAAQxC,OAAO;AACxB,UAAMM,KAAKX,cAAc6C,KAAKlC,EAAE;AAChCmB,WAAOgB,YAAY;MACjBnC;MACAoC,MAAM;MACNC,GAAGd,KAAKW,KAAK/B,KAAKkC,CAAC;MACnBC,GAAGf,KAAKW,KAAK/B,KAAKmC,CAAC;MACnBC,OAAO;QACLC,GAAGlB;QACHmB,GAAGnB;QACHoB,MAAMR,KAAK/B,KAAKC;MAClB;IACF,CAAA;EACF;AAEA,aAAWuC,QAAQ/B,OAAO;AACxB,UAAMgC,UAAUvD,cAAcsD,KAAK3C,EAAE;AACrCmB,WAAOgB,YAAY;MAAEnC,IAAI4C;MAASR,MAAM;IAAQ,CAAA;AAEhDjB,WAAO0B,cAAc;MACnB7C,IAAIZ,gBAAAA;MACJgD,MAAM;MACNU,QAAQF;MACRG,MAAM1D,cAAcsD,KAAK7B,MAAM;MAC/ByB,OAAO;QACLS,UAAU;QACVC,SAAS;QACTC,WAAW;QACXC,kBAAkB;UAAEd,GAAG;UAAKC,GAAG;QAAI;MACrC;IACF,CAAA;AAEAnB,WAAO0B,cAAc;MACnB7C,IAAIZ,gBAAAA;MACJgD,MAAM;MACNU,QAAQF;MACRG,MAAM1D,cAAcsD,KAAK5B,MAAM;MAC/BwB,OAAO;QACLS,UAAU;QACVC,SAAS;QACTC,WAAW;QACXC,kBAAkB;UAAEd,GAAG;UAAKC,GAAG;QAAI;MACrC;IACF,CAAA;EACF;AAEA,QAAMnC,OAAOgB,OAAOiC,MAAMC,iBAAgB;AAE1C,QAAMC,UAAqCC,KAAKC,MAAMD,KAAKE,UAAUtD,KAAKiD,KAAK,CAAA;AAE/E,SAAOE;AACT;;;AD7FA,IAAMI,YAA4BC;AAc3B,IAAMC,mBAAmB,oBAAIC,IAAkC;;;;EAIpE;IACEC,aAAaC;IACb,OAAOC,OAAOC,GAAGC,OAAAA;AACf,YAAMC,UAAUC,OAAMH,CAAAA,EAAGI,IAAI,MAAA;AAC3B,cAAMC,UAAUF,OAAMT,OAAMY,OAAOC,IAAI;UAAEC,KAAK;UAAGC,KAAK;QAAE,CAAA,CAAA,EACrDL,IAAI,MAAMV,OAAMgB,MAAMC,UAAUjB,OAAMY,OAAOC,IAAI;UAAEC,KAAK;UAAGC,KAAK;QAAG,CAAA,CAAA,CAAA,EACnEG,KAAK,MAAA;AAER,cAAMC,MAAMd,MAAMe,GAAGC,IACnBC,OAAOnB,cAAc;UACnBoB,MAAMvB,OAAMwB,SAASC,YAAW;UAChCd,SAASW,OAAOI,UAAU;YAAEf;UAAQ,CAAA;UACpCgB,SAAS,CAAA;QACX,CAAA,CAAA;AAGF,eAAOR;MACT,CAAA;AAEAZ,WAAKC,OAAAA;AACL,aAAOA;IACT;;;;;EAKF;IACEoB,YAAYxB;IACZ,OAAOC,OAAOC,GAAGC,OAAAA;AACf,YAAMsB,UAA2F;QAC/FC,cAAcC;QACdC,YAAYC;QACZC,OAAO;aAAIC;aAAiBC;;QAC5BC,cAAc,MAAMC,SAASC;MAC/B;AAEA,YAAM/B,UAAU,MAAMgC,QAAQC,IAC5BhC,OAAMH,CAAAA,EAAGI,IAAI,YAAA;AACX,cAAMgC,QAAQC,cAAAA;AACd,cAAMC,SAAS,IAAIC,OAAO;UAAE,GAAGhB;UAASa;QAAM,CAAA;AAC9C,cAAMI,QAAQC,cAAAA;AACd,cAAMpC,UAAU,MAAMqC,UAAUJ,QAAQE,KAAAA;AACxCF,eAAOK,QAAO;AACdP,cAAMO,QAAO;AAEb,cAAM9B,MAAMd,MAAMe,GAAGC,IACnBC,OAAOM,aAAa;UAClBL,MAAMvB,OAAMwB,SAASC,YAAW;UAChCyB,QAAQ5B,OAAO6B,YAAY;YAAEC,QAAQC;YAAe1C;UAAQ,CAAA;QAC9D,CAAA,CAAA;AAGF,eAAOQ;MACT,CAAA,CAAA;AAGFZ,WAAKC,OAAAA;AACL,aAAOA;IACT;;;;;EAKF;IACE8C,UAAUlD;IACV,OAAOC,OAAOC,GAAGC,OAAAA;AACf,YAAMC,UAAUC,OAAMH,CAAAA,EAAGI,IAAI,MAAA;AAE3B,cAAM6C,QAAO,oBAAIC,KAAAA,GAAOC,YAAW;AACnC,cAAMC,OAAO;AACb,cAAMC,OAAO;AACb,cAAMC,QAAmC,CAAC;AAC1C,iBAASC,MAAM,GAAGA,OAAOH,MAAMG,OAAO;AACpC,mBAASC,MAAM,GAAGA,OAAO,IAAIA,OAAO;AAClC,kBAAMC,OAAOC,oBAAoB;cAAEH;cAAKC;YAAI,CAAA;AAC5C,gBAAIA,QAAQ,GAAG;AACbF,oBAAMG,IAAAA,IAAQ;gBAAEE,OAAO,GAAGV,IAAAA,KAASM,GAAAA;cAAM;YAC3C,WAAWC,QAAQH,MAAM;AACvB,oBAAMO,OAAOF,oBAAoB;gBAAEH;gBAAKC,KAAK;cAAE,CAAA;AAC/C,oBAAMK,KAAKH,oBAAoB;gBAAEH;gBAAKC,KAAKH,OAAO;cAAE,CAAA;AACpDC,oBAAMG,IAAAA,IAAQ;gBAAEE,OAAO,QAAQC,IAAAA,IAAQC,EAAAA;cAAM;YAC/C,WAAWL,MAAM,KAAKA,MAAMH,OAAO,GAAG;AACpCC,oBAAMG,IAAAA,IAAQ;gBAAEE,OAAOG,KAAKC,MAAMD,KAAKE,OAAM,IAAK,GAAA;cAAQ;YAC5D;UACF;QACF;AAGA,eAAOjE,MAAMe,GAAGC,IACdkD,YAAY;UACVhD,MAAMvB,OAAMwB,SAASC,YAAW;UAChCmC;QACF,CAAA,CAAA;MAEJ,CAAA;AAEArD,WAAKC,OAAAA;AACL,aAAOA;IACT;;CAEH;AAEM,IAAMgE,kBAAkB,CAAuBC,SAAAA;AACpD,SAAO,OACLpE,OACAC,GACAC,OAAAA;AAGA,UAAMmE,gBAAgB,MAAMrE,MAAMe,GAAGuD,eAAeC,MAAK;AACzD,UAAMxB,SACJsB,cAAcG,KAAK,CAACzB,YAAWA,QAAOhD,aAAaqE,KAAKrE,QAAQ,KAAKC,MAAMe,GAAGuD,eAAeG,UAAUL,IAAAA;AAGzG,UAAMM,WAAWC,qBAAqBjF,WAAWqD,OAAOA,QAAQ/C,MAAMe,EAAE;AACxE,UAAMZ,UAAU,MAAMuE,SAASE,cAAc3E,CAAAA;AAG7C,UAAM,EAAEE,SAAS0E,OAAM,IAAK,MAAM7E,MAAMe,GAAGwD,MAAMO,OAAO/B,OAAOgC,SAAAA,CAAAA,EAAYC,IAAG;AAC9E,UAAMC,QAAQJ,OAAOL,KAAK,CAACS,WAAUA,OAAMC,MAAMX,OAAOxE,aAAaqE,KAAKrE,QAAQ;AAClF,QAAI,CAACkF,OAAO;AACV,YAAM/D,OAAOkD,KAAKrE,SAASoF,MAAM,GAAA,EAAKC,IAAG,KAAMhB,KAAKrE;AACpD,YAAMmF,OAAOG,WAAW;QAAEnE;QAAMnB,UAAUqE,KAAKrE;QAAUuF,YAAYvC,OAAOuC;MAAW,CAAA;AACvF,YAAML,SAAQjF,MAAMe,GAAGC,IAAIC,OAAO8D,WAAW;QAAE7D;QAAMgE;MAAK,CAAA,CAAA;AAC1DhF,WAAK;QAAC+E;OAAM;IACd;AAEA,WAAO9E;EACT;AACF;;;AE7KA,OAAOoF,WAAW;AAElB,SAASC,kBAAkB;AASpB,IAAMC,cAAc,CAAC,EAAEC,OAAOC,UAAU,CAAC,GAAGC,OAAOC,QAAO,MAAoB;AACnF,SACE,sBAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KAAiCH,KAAAA,GAChD,sBAAA,cAACE,OAAAA;IAAIC,WAAU;KAAuC,OAAA,CAAA,GAEvDL,MAAMM,IAAI,CAACC,SACV,sBAAA,cAACH,OAAAA;IAAII,KAAKD,KAAKE;IAAUJ,WAAU;KACjC,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KAAyCE,KAAKE,QAAQ,GACrE,sBAAA,cAACL,OAAAA;IAAIC,WAAU;KAA6BJ,QAAQM,KAAKE,QAAQ,KAAK,CAAA,GACtE,sBAAA,cAACC,YAAAA;IACCC,SAAQ;IACRC,MAAK;IACLC,UAAAA;IACAX,OAAM;IACNC,SAAS,MAAMA,QAAQI,KAAKE,QAAQ;;AAMhD;;;AHZO,IAAMK,iBAAiB,CAAC,EAAEC,OAAOC,gBAAe,MAAuB;AAC5E,QAAMC,SAASC,UAAAA;AACf,QAAMC,cAAc;IAACC;IAAcC;IAAaC;;AAChD,QAAMC,eAAe;IAACC,QAAQC;IAASD,QAAQE;IAAaF,QAAQG;;AACpE,QAAM,CAACC,OAAOC,QAAAA,IAAYC,SAAS,CAAA;AACnC,QAAM,CAACC,MAAMC,OAAAA,IAAWF,SAAc,CAAC,CAAA;AAGvC,QAAMG,UAAUC,QAAQ,MAAA;AACtBjB,WAAOkB,SAAShB,WAAAA;AAChB,UAAMiB,oBAAoB,IAAIC,IAC5Bd,aAAae,IAAI,CAACC,SAAS;MAACA,KAAKC;MAAUC,gBAAgBF,IAAAA;KAAM,CAAA;AAGnE,WAAO,IAAIF,IAAI;SAAIK;SAAqBN;KAAkB;EAC5D,GAAG;IAACnB;IAAQM;GAAa;AAGzB,QAAMoB,aAAa,YAAA;AAEjB,UAAMC,gBAAgB,MAAM7B,MAAM8B,GAAGC,eAAeC,MAAK;AACzD,UAAMC,eAAejC,MAAM8B,GAAGI,MAAMH,eAAeI;AAGnD,UAAM,EAAEC,QAAO,IAAK,MAAMpC,MAAM8B,GAAGE,MAAK,EAAGK,IAAG;AAC9C,UAAMC,YAAYC,SAChBH,QAAQI,OAA+B,CAACjB,KAAKkB,QAAAA;AAC3C,YAAMjB,OAAOkB,YAAYD,GAAAA;AACzB,UAAIjB,MAAM;AACR,cAAMX,SAAQU,IAAIC,IAAAA,KAAS;AAC3BD,YAAIC,IAAAA,IAAQX,SAAQ;MACtB;AACA,aAAOU;IACT,GAAG,CAAC,CAAA,CAAA;AAGNN,YAAQ;MACN0B,QAAQ;QACNC,QAAQX,aAAaY;QACrBC,SAASjB,cAAcgB;MACzB;MACAT,SAASE;IACX,CAAA;EACF;AAEAS,iBAAenB,YAAY;IAAC5B;GAAM;AAElC,QAAMgD,mBAAmBC,YACvB,OAAOxB,aAAAA;AACL,UAAMyB,cAAchC,QAAQiC,IAAI1B,QAAAA;AAChC,QAAIyB,aAAa;AAEf,YAAMA,YAAYlD,OAAOa,OAAOZ,eAAAA;AAChC,YAAM2B,WAAAA;IACR;EACF,GACA;IAACV;IAASL;GAAM;AAGlB,SACE,gBAAAuC,OAAA,cAACC,OAAAA;IAAIC,MAAK;IAAOC,WAAU;KACzB,gBAAAH,OAAA,cAACI,QAAQC,MAAI;IAACC,YAAW;KACvB,gBAAAN,OAAA,cAACO,aAAAA;IAAWC,MAAK;IAA+BC,UAAAA;IAASC,OAAM;IAAUC,SAASnC;MAClF,gBAAAwB,OAAA,cAACI,QAAQQ,UAAQ,IAAA,GACjB,gBAAAZ,OAAA,cAACC,OAAAA;IAAIE,WAAU;KACb,gBAAAH,OAAA,cAACa,MAAMR,MAAI,MACT,gBAAAL,OAAA,cAACa,MAAMC,WAAS;IACd1C,MAAK;IACL2C,KAAK;IACLC,KAAK;IACLC,aAAa;IACbX,YAAW;IACXY,OAAOzD;IACP0D,UAAU,CAACC,OAAO1D,SAAS2D,SAASD,GAAGE,OAAOJ,KAAK,CAAA;SAM3D,gBAAAlB,OAAA,cAACuB,aAAAA;IAAYC,OAAOxE;IAAagC,SAASpB,KAAKoB;IAAS0B,OAAM;IAAeC,SAASf;MACtF,gBAAAI,OAAA,cAACuB,aAAAA;IAAYC,OAAOpE;IAAc4B,SAASpB,KAAKoB;IAAS0B,OAAM;IAAgBC,SAASf;MAExF,gBAAAI,OAAA,cAACyB,mBAAAA;IAAkBnB,YAAW;IAAeoB,UAAS;KACnDC,KAAKC,UAAU;IAAEhF;IAAO,GAAGgB;EAAK,GAAGiE,gBAAgB;IAAEC,UAAU;EAAK,CAAA,GAAI,CAAA,CAAA,CAAA;AAIjF;;;AI1GA,IAAA,yBAAeC;",
6
+ "names": ["React", "useCallback", "useMemo", "useState", "DocumentType", "SheetType", "DiagramType", "useClient", "getTypename", "IconButton", "Input", "Toolbar", "useAsyncEffect", "SyntaxHighlighter", "Testing", "jsonKeyReplacer", "sortKeys", "createTLStore", "defaultBindingUtils", "defaultShapeUtils", "defaultShapeTools", "defaultTools", "Editor", "create", "DocumentType", "TextType", "addressToA1Notation", "createSheet", "SheetType", "TLDRAW_SCHEMA", "CanvasType", "DiagramType", "faker", "Filter", "TableType", "createView", "createAsyncGenerator", "range", "Graph", "D3ForceLayout", "createBindingId", "createShapeId", "invariant", "faker", "range", "generateGraph", "nodes", "number", "int", "min", "max", "map", "id", "string", "uuid", "data", "label", "lorem", "words", "split", "word", "charAt", "toUpperCase", "join", "edges", "length", "source", "target", "helpers", "arrayElement", "drawGraph", "editor", "graph", "grid", "nodeSize", "snap", "n", "Math", "round", "layout", "center", "preventOverlap", "collideStrength", "linkDistance", "nodeSpacing", "execute", "node", "createShape", "type", "x", "y", "props", "w", "h", "text", "edge", "arrowId", "createBinding", "fromId", "toId", "terminal", "isExact", "isPrecise", "normalizedAnchor", "store", "getStoreSnapshot", "content", "JSON", "parse", "stringify", "generator", "faker", "staticGenerators", "Map", "DocumentType", "typename", "space", "n", "cb", "objects", "range", "map", "content", "number", "int", "min", "max", "lorem", "sentences", "join", "obj", "db", "add", "create", "name", "commerce", "productName", "TextType", "threads", "DiagramType", "options", "bindingUtils", "defaultBindingUtils", "shapeUtils", "defaultShapeUtils", "tools", "defaultTools", "defaultShapeTools", "getContainer", "document", "body", "Promise", "all", "store", "createTLStore", "editor", "Editor", "graph", "generateGraph", "drawGraph", "dispose", "canvas", "CanvasType", "schema", "TLDRAW_SCHEMA", "SheetType", "year", "Date", "getFullYear", "cols", "rows", "cells", "col", "row", "cell", "addressToA1Notation", "value", "from", "to", "Math", "floor", "random", "createSheet", "createGenerator", "type", "mutableSchema", "schemaRegistry", "query", "find", "addSchema", "generate", "createAsyncGenerator", "createObjects", "tables", "Filter", "TableType", "run", "table", "view", "split", "pop", "createView", "jsonSchema", "React", "IconButton", "SchemaTable", "types", "objects", "label", "onClick", "div", "className", "map", "type", "key", "typename", "IconButton", "variant", "icon", "iconOnly", "SpaceGenerator", "space", "onCreateObjects", "client", "useClient", "staticTypes", "DocumentType", "DiagramType", "SheetType", "mutableTypes", "Testing", "OrgType", "ProjectType", "ContactType", "count", "setCount", "useState", "info", "setInfo", "typeMap", "useMemo", "addTypes", "mutableGenerators", "Map", "map", "type", "typename", "createGenerator", "staticGenerators", "updateInfo", "mutableSchema", "db", "schemaRegistry", "query", "staticSchema", "graph", "schemas", "objects", "run", "objectMap", "sortKeys", "reduce", "obj", "getTypename", "schema", "static", "length", "mutable", "useAsyncEffect", "handleCreateData", "useCallback", "constructor", "get", "React", "div", "role", "className", "Toolbar", "Root", "classNames", "IconButton", "icon", "iconOnly", "label", "onClick", "Expander", "Input", "TextInput", "min", "max", "placeholder", "value", "onChange", "ev", "parseInt", "target", "SchemaTable", "types", "SyntaxHighlighter", "language", "JSON", "stringify", "jsonKeyReplacer", "truncate", "SpaceGenerator"]
7
+ }