jazz-tools 0.15.1 → 0.15.2
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.
- package/.turbo/turbo-build.log +38 -38
- package/CHANGELOG.md +11 -0
- package/dist/inspector/index.js +117 -98
- package/dist/inspector/index.js.map +1 -1
- package/dist/inspector/viewer/co-plain-text-view.d.ts +5 -0
- package/dist/inspector/viewer/co-plain-text-view.d.ts.map +1 -0
- package/dist/inspector/viewer/page.d.ts.map +1 -1
- package/dist/inspector/viewer/type-icon.d.ts.map +1 -1
- package/dist/inspector/viewer/use-resolve-covalue.d.ts +1 -1
- package/dist/inspector/viewer/use-resolve-covalue.d.ts.map +1 -1
- package/dist/inspector/viewer/value-renderer.d.ts.map +1 -1
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/testing.js +2 -0
- package/dist/react/testing.js.map +1 -1
- package/package.json +5 -5
- package/src/inspector/viewer/co-plain-text-view.tsx +17 -0
- package/src/inspector/viewer/page.tsx +5 -0
- package/src/inspector/viewer/type-icon.tsx +1 -0
- package/src/inspector/viewer/use-resolve-covalue.ts +1 -1
- package/src/inspector/viewer/value-renderer.tsx +4 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/inspector/index.ts","../../src/inspector/viewer/new-app.tsx","../../src/inspector/ui/button.tsx","../../src/inspector/ui/input.tsx","../../src/inspector/viewer/breadcrumbs.tsx","../../src/inspector/viewer/page-stack.tsx","../../src/inspector/viewer/page.tsx","../../src/inspector/ui/badge.tsx","../../src/inspector/ui/heading.tsx","../../src/inspector/ui/text.tsx","../../src/inspector/viewer/account-or-group-text.tsx","../../src/inspector/viewer/use-resolve-covalue.ts","../../src/inspector/viewer/co-stream-view.tsx","../../src/inspector/viewer/type-icon.tsx","../../src/inspector/viewer/types.ts","../../src/inspector/viewer/value-renderer.tsx","../../src/inspector/ui/icons/chevron-down-icon.tsx","../../src/inspector/ui/icons/delete-icon.tsx","../../src/inspector/ui/icons/link-icon.tsx","../../src/inspector/ui/icon.tsx","../../src/inspector/ui/card.tsx","../../src/inspector/ui/grid.tsx","../../src/inspector/viewer/grid-view.tsx","../../src/inspector/viewer/raw-data-card.tsx","../../src/inspector/viewer/account-view.tsx","../../src/inspector/ui/table.tsx","../../src/inspector/viewer/group-view.tsx","../../src/inspector/viewer/role-display.tsx","../../src/inspector/viewer/table-viewer.tsx","../../src/inspector/viewer/use-page-path.ts","../../src/inspector/ui/global-styles.tsx","../../src/inspector/viewer/inpsector-button.tsx","../../src/inspector/viewer/use-open-inspector.ts","../../src/inspector/ui/select.tsx"],"sourcesContent":["import React from \"react\";\n\nexport { JazzInspector, JazzInspectorInternal } from \"./viewer/new-app.js\";\nexport { PageStack } from \"./viewer/page-stack.js\";\nexport { Breadcrumbs } from \"./viewer/breadcrumbs.js\";\nexport { AccountOrGroupText } from \"./viewer/account-or-group-text.js\";\n\nexport { Button } from \"./ui/button.js\";\nexport { Input } from \"./ui/input.js\";\nexport { Select } from \"./ui/select.js\";\nexport { Icon } from \"./ui/icon.js\";\nexport { GlobalStyles } from \"./ui/global-styles.js\";\n\nexport {\n resolveCoValue,\n useResolvedCoValue,\n} from \"./viewer/use-resolve-covalue.js\";\n\nexport type { PageInfo } from \"./viewer/types.js\";\n\nimport { setup } from \"goober\";\n\nsetup(React.createElement);\n","import { CoID, LocalNode, RawAccount, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport { useJazzContext } from \"jazz-tools/react-core\";\nimport React, { useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { Input } from \"../ui/input.js\";\nimport { Breadcrumbs } from \"./breadcrumbs.js\";\nimport { PageStack } from \"./page-stack.js\";\nimport { usePagePath } from \"./use-page-path.js\";\n\nimport { Account } from \"jazz-tools\";\nimport { GlobalStyles } from \"../ui/global-styles.js\";\nimport { Heading } from \"../ui/heading.js\";\nimport { InspectorButton, type Position } from \"./inpsector-button.js\";\nimport { useOpenInspector } from \"./use-open-inspector.js\";\n\nconst InspectorContainer = styled(\"div\")`\n position: fixed;\n height: 50vh;\n max-height: 800px;\n display: flex;\n flex-direction: column;\n bottom: 0;\n left: 0;\n width: 100%;\n background-color: white;\n border-top: 1px solid var(--j-border-color);\n color: var(--j-text-color);\n \n @media (prefers-color-scheme: dark) {\n background-color: var(--j-background);\n }\n`;\n\nconst HeaderContainer = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 0 0.75rem;\n margin: 0.75rem 0;\n`;\n\nconst Form = styled(\"form\")`\n width: 24rem;\n`;\n\nconst InitialForm = styled(\"form\")`\n display: flex;\n flex-direction: column;\n position: relative;\n top: -1.5rem;\n justify-content: center;\n gap: 0.5rem;\n height: 100%;\n width: 100%;\n max-width: 24rem;\n margin: 0 auto;\n`;\n\nconst OrText = styled(\"p\")`\n text-align: center;\n`;\n\nexport function JazzInspector({ position = \"right\" }: { position?: Position }) {\n const context = useJazzContext<Account>();\n const localNode = context.node;\n const me = \"me\" in context ? context.me : undefined;\n\n if (process.env.NODE_ENV !== \"development\") return null;\n\n return (\n <JazzInspectorInternal\n position={position}\n localNode={localNode}\n accountId={me?._raw.id}\n />\n );\n}\n\nexport function JazzInspectorInternal({\n position = \"right\",\n localNode,\n accountId,\n}: {\n position?: Position;\n localNode?: LocalNode;\n accountId?: CoID<RawAccount>;\n}) {\n const [open, setOpen] = useOpenInspector();\n const [coValueId, setCoValueId] = useState<CoID<RawCoValue> | \"\">(\"\");\n const { path, addPages, goToIndex, goBack, setPage } = usePagePath();\n\n const handleCoValueIdSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (coValueId) {\n setPage(coValueId);\n }\n setCoValueId(\"\");\n };\n\n if (!open) {\n return (\n <InspectorButton position={position} onClick={() => setOpen(true)} />\n );\n }\n\n return (\n <InspectorContainer as={GlobalStyles} style={{ zIndex: 999 }}>\n <HeaderContainer>\n <Breadcrumbs path={path} onBreadcrumbClick={goToIndex} />\n <Form onSubmit={handleCoValueIdSubmit}>\n {path.length !== 0 && (\n <Input\n label=\"CoValue ID\"\n style={{ fontFamily: \"monospace\" }}\n hideLabel\n placeholder=\"co_z1234567890abcdef123456789\"\n value={coValueId}\n onChange={(e) => setCoValueId(e.target.value as CoID<RawCoValue>)}\n />\n )}\n </Form>\n <Button variant=\"plain\" type=\"button\" onClick={() => setOpen(false)}>\n Close\n </Button>\n </HeaderContainer>\n\n <PageStack\n path={path}\n node={localNode}\n goBack={goBack}\n addPages={addPages}\n >\n {path.length <= 0 && (\n <InitialForm\n onSubmit={handleCoValueIdSubmit}\n aria-hidden={path.length !== 0}\n >\n <Heading>Jazz CoValue Inspector</Heading>\n <Input\n label=\"CoValue ID\"\n style={{ minWidth: \"21rem\", fontFamily: \"monospace\" }}\n hideLabel\n placeholder=\"co_z1234567890abcdef123456789\"\n value={coValueId}\n onChange={(e) => setCoValueId(e.target.value as CoID<RawCoValue>)}\n />\n <Button type=\"submit\" variant=\"primary\">\n Inspect CoValue\n </Button>\n\n {accountId && (\n <>\n <OrText>or</OrText>\n\n <Button\n variant=\"secondary\"\n onClick={() => {\n setCoValueId(accountId);\n setPage(accountId);\n }}\n >\n Inspect my account\n </Button>\n </>\n )}\n </InitialForm>\n )}\n </PageStack>\n </InspectorContainer>\n );\n}\n","import { styled } from \"goober\";\nimport { forwardRef } from \"react\";\n\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"link\" | \"plain\";\n children?: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nconst StyledButton = styled(\"button\")<{ variant: string; disabled?: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n text-align: center;\n transition: colors 0.2s;\n border-radius: var(--j-radius-lg);\n pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n cursor: ${(props) => (props.disabled ? \"not-allowed\" : \"pointer\")};\n\n ${(props) => {\n switch (props.variant) {\n case \"primary\":\n return `\n padding: 0.375rem 0.75rem;\n background-color: var(--j-primary-color);\n border-color: var(--j-primary-color);\n color: white;\n font-weight: 500;\n `;\n case \"secondary\":\n return `\n padding: 0.375rem 0.75rem;\n color: var(--j-text-color-strong);\n border: 1px solid var(--j-border-color);\n font-weight: 500;\n &:hover {\n border-color: var(--j-border-color-hover);\n }\n `;\n case \"link\":\n return `\n color: var(--j-link-color);\n &:hover {\n text-decoration: underline;\n }\n `;\n default:\n return \"\";\n }\n }}\n`;\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n children,\n variant = \"primary\",\n disabled,\n type = \"button\",\n ...buttonProps\n },\n ref,\n ) => {\n return (\n <StyledButton\n ref={ref}\n {...buttonProps}\n disabled={disabled}\n className={className}\n type={type}\n variant={variant}\n >\n {children}\n </StyledButton>\n );\n },\n);\n","import { styled } from \"goober\";\nimport { forwardRef, useId } from \"react\";\n\ninterface LabelProps {\n hideLabel?: boolean;\n}\n\ninterface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n LabelProps {\n // label can be hidden with a \"label:sr-only\" className\n label: string;\n className?: string;\n id?: string;\n}\n\nconst Container = styled(\"div\")`\n display: grid;\n gap: 0.25rem;\n`;\n\nconst StyledInput = styled(\"input\")`\n width: 100%;\n border-radius: var(--j-radius-md);\n border: 1px solid var(--j-border-color);\n padding: 0.5rem 0.875rem;\n box-shadow: var(--j-shadow-sm);\n font-weight: 500;\n background-color: white;\n color: var(--text-color-strong);\n\n @media (prefers-color-scheme: dark) {\n background-color: var(--j-foreground);\n }\n`;\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ label, className, hideLabel, id: customId, ...inputProps }, ref) => {\n const generatedId = useId();\n const id = customId || generatedId;\n\n return (\n <Container className={className}>\n <label htmlFor={id} className={hideLabel ? \"j-sr-only\" : \"\"}>\n {label}\n </label>\n <StyledInput ref={ref} {...inputProps} id={id} />\n </Container>\n );\n },\n);\n","import { styled } from \"goober\";\nimport React from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { PageInfo } from \"./types.js\";\n\nconst BreadcrumbsContainer = styled(\"div\")`\n position: relative;\n z-index: 20;\n flex: 1;\n display: flex;\n align-items: center;\n`;\n\nconst Separator = styled(\"span\")`\n padding: 0 0.125rem;\n`;\n\ninterface BreadcrumbsProps {\n path: PageInfo[];\n onBreadcrumbClick: (index: number) => void;\n}\n\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({\n path,\n onBreadcrumbClick,\n}) => {\n return (\n <BreadcrumbsContainer>\n <Button\n variant=\"link\"\n style={{ padding: \"0 0.25rem\" }}\n onClick={() => onBreadcrumbClick(-1)}\n >\n Home\n </Button>\n {path.map((page, index) => {\n return (\n <React.Fragment key={page.coId}>\n <Separator aria-hidden>/</Separator>\n <Button\n variant=\"link\"\n style={{ padding: \"0 0.25rem\" }}\n onClick={() => onBreadcrumbClick(index)}\n >\n {index === 0 ? page.name || \"Root\" : page.name}\n </Button>\n </React.Fragment>\n );\n })}\n </BreadcrumbsContainer>\n );\n};\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport { Page } from \"./page.js\";\n\n// Define the structure of a page in the path\ninterface PageInfo {\n coId: CoID<RawCoValue>;\n name?: string;\n}\n\n// Props for the PageStack component\ninterface PageStackProps {\n path: PageInfo[];\n node?: LocalNode | null;\n goBack: () => void;\n addPages: (pages: PageInfo[]) => void;\n children?: React.ReactNode;\n}\n\nconst PageStackContainer = styled(\"div\")`\n position: relative;\n padding: 0 0.75rem;\n overflow-y: auto;\n flex: 1;\n color: var(--j-text-color);\n font-size: 16px;\n`;\n\nexport function PageStack({\n path,\n node,\n goBack,\n addPages,\n children,\n}: PageStackProps) {\n const page = path[path.length - 1];\n const index = path.length - 1;\n\n return (\n <>\n <PageStackContainer>\n {children}\n {node && page && (\n <Page\n coId={page.coId}\n node={node}\n name={page.name || page.coId}\n onHeaderClick={goBack}\n onNavigate={addPages}\n isTopLevel={index === path.length - 1}\n />\n )}\n </PageStackContainer>\n </>\n );\n}\n","import { CoID, LocalNode, RawCoStream, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport React from \"react\";\nimport { Badge } from \"../ui/badge.js\";\nimport { Heading } from \"../ui/heading.js\";\nimport { Text } from \"../ui/text.js\";\nimport { AccountOrGroupText } from \"./account-or-group-text.js\";\nimport { AccountView } from \"./account-view.js\";\nimport { CoStreamView } from \"./co-stream-view.js\";\nimport { GridView } from \"./grid-view.js\";\nimport { GroupView } from \"./group-view.js\";\nimport { RoleDisplay } from \"./role-display.js\";\nimport { TableView } from \"./table-viewer.js\";\nimport { TypeIcon } from \"./type-icon.js\";\nimport { PageInfo } from \"./types.js\";\nimport { resolveCoValue, useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\ninterface PageContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n isTopLevel?: boolean;\n}\n\nconst BasePageContainer = React.forwardRef<HTMLDivElement, PageContainerProps>(\n ({ isTopLevel, ...rest }, ref) => <div ref={ref} {...rest} />,\n);\n\nconst PageContainer = styled(BasePageContainer)<PageContainerProps>`\n position: absolute;\n z-index: 10;\n inset: 0;\n width: 100%;\n height: 100%;\n padding: 0 0.75rem;\n`;\n\nconst BackButton = styled(\"div\")`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n height: 2.5rem;\n`;\n\nconst HeaderContainer = styled(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n`;\n\nconst TitleContainer = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.75rem;\n`;\n\nconst Title = styled(Heading)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 0.25rem;\n`;\n\nconst BadgeContainer = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.75rem;\n`;\n\nconst ContentContainer = styled(\"div\")`\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n padding-bottom: 2rem;\n`;\n\ntype PageProps = {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n name: string;\n onNavigate: (newPages: PageInfo[]) => void;\n onHeaderClick?: () => void;\n isTopLevel?: boolean;\n style?: React.CSSProperties;\n className?: string;\n};\n\nfunction View(\n props: PageProps & { coValue: Awaited<ReturnType<typeof resolveCoValue>> },\n) {\n const { type, extendedType } = props.coValue;\n const { snapshot, value } = props.coValue;\n const { node, onNavigate } = props;\n\n if (!snapshot || snapshot === \"unavailable\") return;\n\n if (type === \"costream\") {\n return (\n <CoStreamView\n data={snapshot}\n onNavigate={onNavigate}\n node={node}\n value={value as RawCoStream}\n />\n );\n }\n\n if (extendedType === \"group\") {\n return <GroupView data={snapshot} node={node} onNavigate={onNavigate} />;\n }\n\n if (extendedType === \"account\") {\n return <AccountView data={snapshot} node={node} onNavigate={onNavigate} />;\n }\n\n if (type === \"colist\" || extendedType === \"record\") {\n return <TableView data={snapshot} node={node} onNavigate={onNavigate} />;\n }\n\n return <GridView data={snapshot} onNavigate={onNavigate} node={node} />;\n}\n\nexport function Page(props: PageProps) {\n const {\n coId,\n node,\n name,\n onNavigate,\n onHeaderClick,\n style,\n className = \"\",\n isTopLevel,\n } = props;\n const coValue = useResolvedCoValue(coId, node);\n\n const { value, snapshot, type, extendedType } = coValue;\n\n if (snapshot === \"unavailable\") {\n return <div style={style}>Data unavailable</div>;\n }\n\n if (!snapshot) {\n return <div style={style}></div>;\n }\n\n return (\n <PageContainer style={style} className={className} isTopLevel={isTopLevel}>\n {!isTopLevel && (\n <BackButton\n aria-label=\"Back\"\n onClick={() => {\n onHeaderClick?.();\n }}\n aria-hidden=\"true\"\n ></BackButton>\n )}\n <HeaderContainer>\n <TitleContainer>\n <Title>\n <span>\n {name}\n {typeof snapshot === \"object\" && \"name\" in snapshot ? (\n <span style={{ color: \"#57534e\", fontWeight: 500 }}>\n {\" \"}\n {(snapshot as { name: string }).name}\n </span>\n ) : null}\n </span>\n </Title>\n <BadgeContainer>\n <Badge>\n {type && <TypeIcon type={type} extendedType={extendedType} />}\n </Badge>\n <Badge>{coId}</Badge>\n </BadgeContainer>\n </TitleContainer>\n </HeaderContainer>\n <ContentContainer>\n <View {...props} coValue={coValue} />\n {extendedType !== \"account\" && extendedType !== \"group\" && (\n <>\n <RoleDisplay node={node} value={value} />\n <Text muted>\n Owned by{\" \"}\n <AccountOrGroupText\n coId={value.group.id}\n node={node}\n showId\n onClick={() => {\n onNavigate([{ coId: value.group.id, name: \"owner\" }]);\n }}\n />\n </Text>\n </>\n )}\n </ContentContainer>\n </PageContainer>\n );\n}\n","import { styled } from \"goober\";\n\nconst StyledBadge = styled(\"span\")<{ className?: string }>`\n font-size: 0.875rem;\n font-weight: 500;\n padding: 0.125rem 0.25rem;\n margin-left: -0.125rem;\n border-radius: var(--j-radius-sm);\n background-color: var(--j-foreground);\n display: inline-block;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: var(--j-text-color-strong);\n`;\n\nexport function Badge({\n children,\n className,\n}: React.PropsWithChildren<{ className?: string }>) {\n return <StyledBadge className={className}>{children}</StyledBadge>;\n}\n","import { styled } from \"goober\";\n\nconst StyledHeading = styled(\"h1\")<{ className?: string }>`\n font-size: 1.125rem;\n text-align: center;\n font-weight: 500;\n color: var(--j-text-color-strong);\n`;\n\nexport function Heading({\n children,\n className,\n}: React.PropsWithChildren<{ className?: string }>) {\n return <StyledHeading className={className}>{children}</StyledHeading>;\n}\n","import { styled } from \"goober\";\nimport React from \"react\";\n\ninterface TextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n muted?: boolean;\n strong?: boolean;\n small?: boolean;\n inline?: boolean;\n mono?: boolean;\n}\n\nconst BaseText = React.forwardRef<HTMLParagraphElement, TextProps>(\n ({ muted, strong, small, inline, mono, ...rest }, ref) => (\n <div ref={ref} {...rest} />\n ),\n);\n\nconst StyledText = styled(BaseText)<TextProps>`\n ${(props) =>\n props.muted &&\n `\n color: var(--j-neutral-500);\n `}\n\n ${(props) =>\n props.strong &&\n `\n font-weight: 500;\n color: var(--j-text-color-strong);\n `}\n\n ${(props) =>\n props.small &&\n `\n font-size: 0.875rem;\n `}\n\n ${(props) =>\n props.inline &&\n `\n display: inline;\n `}\n\n ${(props) =>\n props.mono &&\n `\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n `}\n`;\n\nexport function Text(\n props: React.PropsWithChildren<{\n className?: string;\n muted?: boolean;\n strong?: boolean;\n inline?: boolean;\n small?: boolean;\n mono?: boolean;\n }>,\n) {\n return <StyledText {...props} />;\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { resolveCoValue, useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\nexport function AccountOrGroupText({\n coId,\n node,\n showId = false,\n onClick,\n}: {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n showId?: boolean;\n onClick?: (name?: string) => void;\n}) {\n const { snapshot, extendedType } = useResolvedCoValue(coId, node);\n const [name, setName] = useState<string | null>(null);\n\n useEffect(() => {\n if (snapshot && typeof snapshot === \"object\" && \"profile\" in snapshot) {\n const profileId = snapshot.profile as CoID<RawCoValue>;\n resolveCoValue(profileId, node).then((profileResult) => {\n if (\n profileResult.snapshot &&\n typeof profileResult.snapshot === \"object\" &&\n \"name\" in profileResult.snapshot\n ) {\n setName(profileResult.snapshot.name as string);\n }\n });\n }\n }, [snapshot, node, extendedType]);\n\n if (!snapshot) return <span>Loading...</span>;\n if (extendedType !== \"account\" && extendedType !== \"group\") {\n return <span>CoID is not an account or group</span>;\n }\n\n const displayName = extendedType === \"account\" ? name || \"Account\" : \"Group\";\n const displayText = showId ? `${displayName} <${coId}>` : displayName;\n\n if (onClick) {\n return (\n <Button variant=\"link\" onClick={() => onClick(displayName)}>\n {displayText}\n </Button>\n );\n }\n\n return <>{displayText}</>;\n}\n","import {\n CoID,\n LocalNode,\n RawBinaryCoStream,\n RawCoStream,\n RawCoValue,\n} from \"cojson\";\nimport { useEffect, useState } from \"react\";\nimport { detectCoStreamType } from \"./co-stream-view.js\";\n\nexport type CoJsonType = \"comap\" | \"costream\" | \"colist\";\nexport type ExtendedCoJsonType =\n | \"image\"\n | \"record\"\n | \"account\"\n | \"group\"\n | \"file\";\n\ntype JSON = string | number | boolean | null | JSON[] | { [key: string]: JSON };\ntype JSONObject = { [key: string]: JSON };\n\ntype ResolvedImageDefinition = {\n originalSize: [number, number];\n placeholderDataURL?: string;\n [res: `${number}x${number}`]: RawBinaryCoStream[\"id\"];\n};\n\n// Type guard for browser image\nexport const isBrowserImage = (\n coValue: JSONObject,\n): coValue is ResolvedImageDefinition => {\n return \"originalSize\" in coValue && \"placeholderDataURL\" in coValue;\n};\n\nexport type ResolvedGroup = {\n readKey: string;\n [key: string]: JSON;\n};\n\nexport const isGroup = (coValue: JSONObject): coValue is ResolvedGroup => {\n return \"readKey\" in coValue;\n};\n\nexport type ResolvedAccount = {\n profile: {\n name: string;\n };\n [key: string]: JSON;\n};\n\nexport const isAccount = (coValue: JSONObject): coValue is ResolvedAccount => {\n return isGroup(coValue) && \"profile\" in coValue;\n};\n\nexport async function resolveCoValue(\n coValueId: CoID<RawCoValue>,\n node: LocalNode,\n): Promise<\n | {\n value: RawCoValue;\n snapshot: JSONObject;\n type: CoJsonType | null;\n extendedType: ExtendedCoJsonType | undefined;\n }\n | {\n value: undefined;\n snapshot: \"unavailable\";\n type: null;\n extendedType: undefined;\n }\n> {\n const value = await node.load(coValueId);\n\n if (value === \"unavailable\") {\n return {\n value: undefined,\n snapshot: \"unavailable\",\n type: null,\n extendedType: undefined,\n };\n }\n\n const snapshot = value.toJSON() as JSONObject;\n const type = value.type as CoJsonType;\n\n // Determine extended type\n let extendedType: ExtendedCoJsonType | undefined;\n\n if (type === \"comap\") {\n if (isBrowserImage(snapshot)) {\n extendedType = \"image\";\n } else if (isAccount(snapshot)) {\n extendedType = \"account\";\n } else if (isGroup(snapshot)) {\n extendedType = \"group\";\n }\n }\n\n return {\n value,\n snapshot,\n type,\n extendedType,\n };\n}\n\nfunction subscribeToCoValue(\n coValueId: CoID<RawCoValue>,\n node: LocalNode,\n callback: (result: Awaited<ReturnType<typeof resolveCoValue>>) => void,\n) {\n return node.subscribe(coValueId, (value) => {\n if (value === \"unavailable\") {\n callback({\n value: undefined,\n snapshot: \"unavailable\",\n type: null,\n extendedType: undefined,\n });\n } else {\n const snapshot = value.toJSON() as JSONObject;\n const type = value.type as CoJsonType;\n let extendedType: ExtendedCoJsonType | undefined;\n\n if (type === \"comap\") {\n if (isBrowserImage(snapshot)) {\n extendedType = \"image\";\n } else if (isAccount(snapshot)) {\n extendedType = \"account\";\n } else if (isGroup(snapshot)) {\n extendedType = \"group\";\n }\n } else if (type === \"costream\") {\n const coStream = detectCoStreamType(value as RawCoStream);\n\n if (coStream.type === \"binary\") {\n extendedType = \"file\";\n }\n }\n\n callback({\n value,\n snapshot,\n type,\n extendedType,\n });\n }\n });\n}\n\nexport function useResolvedCoValue(\n coValueId: CoID<RawCoValue>,\n node: LocalNode,\n) {\n const [result, setResult] =\n useState<Awaited<ReturnType<typeof resolveCoValue>>>();\n\n useEffect(() => {\n let isMounted = true;\n const unsubscribe = subscribeToCoValue(coValueId, node, (newResult) => {\n if (isMounted) {\n setResult(newResult);\n }\n });\n\n return () => {\n isMounted = false;\n unsubscribe();\n };\n }, [coValueId, node]);\n\n return (\n result || {\n value: undefined,\n snapshot: undefined,\n type: undefined,\n extendedType: undefined,\n }\n );\n}\n\nexport function useResolvedCoValues(\n coValueIds: CoID<RawCoValue>[],\n node: LocalNode,\n) {\n const [results, setResults] = useState<\n Awaited<ReturnType<typeof resolveCoValue>>[]\n >([]);\n\n useEffect(() => {\n let isMounted = true;\n const unsubscribes: (() => void)[] = [];\n\n coValueIds.forEach((coValueId, index) => {\n const unsubscribe = subscribeToCoValue(coValueId, node, (newResult) => {\n if (isMounted) {\n setResults((prevResults) => {\n const newResults = prevResults.slice(0, coValueIds.length);\n newResults[index] = newResult;\n return newResults;\n });\n }\n });\n unsubscribes.push(unsubscribe);\n });\n\n return () => {\n isMounted = false;\n unsubscribes.forEach((unsubscribe) => unsubscribe());\n };\n }, [coValueIds, node]);\n\n return results;\n}\n","import {\n CoID,\n LocalNode,\n RawBinaryCoStream,\n RawCoStream,\n RawCoValue,\n} from \"cojson\";\nimport { base64URLtoBytes } from \"cojson\";\nimport { BinaryStreamItem, BinaryStreamStart, CoStreamItem } from \"cojson\";\nimport type { JsonObject, JsonValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport { useEffect, useState } from \"react\";\nimport { Badge } from \"../ui/badge.js\";\nimport { Button } from \"../ui/button.js\";\nimport { AccountOrGroupText } from \"./account-or-group-text.js\";\nimport { PageInfo } from \"./types.js\";\n\n// typeguard for BinaryStreamStart\nfunction isBinaryStreamStart(item: unknown): item is BinaryStreamStart {\n return (\n typeof item === \"object\" &&\n item !== null &&\n \"type\" in item &&\n item.type === \"start\"\n );\n}\n\nexport function detectCoStreamType(value: RawCoStream | RawBinaryCoStream) {\n const firstKey = Object.keys(value.items)[0];\n if (!firstKey)\n return {\n type: \"unknown\",\n };\n\n const items = value.items[firstKey as never]?.map((v) => v.value);\n\n if (!items)\n return {\n type: \"unknown\",\n };\n const firstItem = items[0];\n if (!firstItem)\n return {\n type: \"unknown\",\n };\n // This is a binary stream\n if (isBinaryStreamStart(firstItem)) {\n return {\n type: \"binary\",\n items: items as BinaryStreamItem[],\n };\n } else {\n return {\n type: \"coStream\",\n };\n }\n}\n\nasync function getBlobFromCoStream({\n items,\n onlyFirstChunk = false,\n}: {\n items: BinaryStreamItem[];\n onlyFirstChunk?: boolean;\n}) {\n if (onlyFirstChunk && items.length > 1) {\n items = items.slice(0, 2);\n }\n\n const chunks: Uint8Array[] = [];\n\n const binary_U_prefixLength = 8;\n\n let lastProgressUpdate = Date.now();\n\n for (const item of items.slice(1)) {\n if (item.type === \"end\") {\n break;\n }\n\n if (item.type !== \"chunk\") {\n console.error(\"Invalid binary stream chunk\", item);\n return undefined;\n }\n\n const chunk = base64URLtoBytes(item.chunk.slice(binary_U_prefixLength));\n // totalLength += chunk.length;\n chunks.push(chunk);\n\n if (Date.now() - lastProgressUpdate > 100) {\n lastProgressUpdate = Date.now();\n }\n }\n const defaultMime =\n items[0] && \"mimeType\" in items[0] ? items[0].mimeType : null;\n\n const blob = new Blob(chunks, defaultMime ? { type: defaultMime } : {});\n\n const mimeType =\n defaultMime === \"\" ? await detectPDFMimeType(blob) : defaultMime;\n\n return {\n blob,\n mimeType: mimeType as string,\n unfinishedChunks: items.length > 1,\n totalSize:\n items[0] && \"totalSizeBytes\" in items[0]\n ? (items[0].totalSizeBytes as number)\n : undefined,\n };\n}\n\nconst detectPDFMimeType = async (blob: Blob): Promise<string> => {\n const arrayBuffer = await blob.slice(0, 4).arrayBuffer();\n const uint8Array = new Uint8Array(arrayBuffer);\n const header = uint8Array.reduce(\n (acc, byte) => acc + String.fromCharCode(byte),\n \"\",\n );\n\n if (header === \"%PDF\") {\n return \"application/pdf\";\n }\n return \"unknown\";\n};\n\nconst BinaryDownloadButton = ({\n pdfBlob,\n fileName = \"document\",\n label,\n mimeType,\n}: {\n pdfBlob: Blob;\n mimeType?: string;\n fileName?: string;\n label: string;\n}) => {\n const downloadFile = () => {\n const url = URL.createObjectURL(\n new Blob([pdfBlob], mimeType ? { type: mimeType } : {}),\n );\n const link = document.createElement(\"a\");\n link.href = url;\n link.download =\n mimeType === \"application/pdf\" ? `${fileName}.pdf` : fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n return (\n <Button variant=\"secondary\" onClick={downloadFile}>\n ⬇️ {label}\n {/* Download {mimeType === \"application/pdf\" ? \"PDF\" : \"File\"} */}\n </Button>\n );\n};\n\nconst LabelContentPairContainer = styled(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n`;\n\nconst BinaryStreamGrid = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 0.5rem;\n max-width: 48rem;\n`;\n\nconst ImagePreviewContainer = styled(\"div\")`\n background-color: rgb(249 250 251);\n padding: 0.75rem;\n border-radius: var(--j-radius-md);\n @media (prefers-color-scheme: dark) {\n background-color: rgb(28 25 23);\n }\n`;\n\nconst CoStreamGrid = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 0.5rem;\n`;\n\nconst CoStreamItemContainer = styled(\"div\")`\n padding: 0.75rem;\n border-radius: var(--j-radius-lg);\n overflow: hidden;\n border: 1px solid rgb(229 231 235);\n cursor: pointer;\n box-shadow: var(--j-shadow-sm);\n &:hover {\n background-color: rgb(243 244 246 / 0.05);\n }\n`;\n\nconst LabelContentPair = ({\n label,\n content,\n}: {\n label: string;\n content: React.ReactNode;\n}) => {\n return (\n <LabelContentPairContainer>\n <span>{label}</span>\n <span>{content}</span>\n </LabelContentPairContainer>\n );\n};\n\nfunction RenderCoBinaryStream({\n value,\n items,\n}: {\n items: BinaryStreamItem[];\n value: RawBinaryCoStream;\n}) {\n const [file, setFile] = useState<\n | {\n blob: Blob;\n mimeType: string;\n unfinishedChunks: boolean;\n totalSize: number | undefined;\n }\n | undefined\n | null\n >(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n // load only the first chunk to get the mime type and size\n getBlobFromCoStream({\n items,\n onlyFirstChunk: true,\n })\n .then((v) => {\n if (v) {\n setFile(v);\n if (v.mimeType.includes(\"image\")) {\n // If it's an image, load the full blob\n getBlobFromCoStream({\n items,\n }).then((s) => {\n if (s) setFile(s);\n });\n }\n }\n })\n .finally(() => setIsLoading(false));\n }, [items]);\n\n if (!isLoading && !file) return <div>No blob</div>;\n\n if (isLoading) return <div>Loading...</div>;\n if (!file) return <div>No blob</div>;\n\n const { blob, mimeType } = file;\n\n const sizeInKB = (file.totalSize || 0) / 1024;\n\n return (\n <>\n <BinaryStreamGrid>\n <LabelContentPair\n label=\"Mime Type\"\n content={<Badge>{mimeType || \"No mime type\"}</Badge>}\n />\n <LabelContentPair\n label=\"Size\"\n content={<span>{sizeInKB.toFixed(2)} KB</span>}\n />\n <LabelContentPair\n label=\"Download\"\n content={\n <BinaryDownloadButton\n fileName={value.id.toString()}\n pdfBlob={blob}\n mimeType={mimeType}\n label={\n mimeType === \"application/pdf\"\n ? \"Download PDF\"\n : \"Download file\"\n }\n />\n }\n />\n </BinaryStreamGrid>\n {mimeType === \"image/png\" || mimeType === \"image/jpeg\" ? (\n <LabelContentPair\n label=\"Preview\"\n content={\n <ImagePreviewContainer>\n <RenderBlobImage blob={blob} />\n </ImagePreviewContainer>\n }\n />\n ) : null}\n </>\n );\n}\n\nfunction RenderCoStream({\n value,\n node,\n}: {\n value: RawCoStream;\n node: LocalNode;\n}) {\n const streamPerUser = Object.keys(value.items);\n const userCoIds = streamPerUser.map((stream) => stream.split(\"_session\")[0]);\n\n return (\n <CoStreamGrid>\n {userCoIds.map((id, idx) => (\n <CoStreamItemContainer key={id}>\n <AccountOrGroupText coId={id as CoID<RawCoValue>} node={node} />\n {/* @ts-expect-error - TODO: fix types */}\n {value.items[streamPerUser[idx]]?.map(\n (item: CoStreamItem<JsonValue>) => (\n <div>\n {new Date(item.madeAt).toLocaleString()}{\" \"}\n {JSON.stringify(item.value)}\n </div>\n ),\n )}\n </CoStreamItemContainer>\n ))}\n </CoStreamGrid>\n );\n}\n\nexport function CoStreamView({\n value,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n value: RawCoStream;\n}) {\n // if (!value) return <div>No value</div>;\n\n const streamType = detectCoStreamType(value);\n\n if (streamType.type === \"binary\") {\n if (streamType.items === undefined) {\n return <div>No binary stream</div>;\n }\n\n return (\n <RenderCoBinaryStream\n value={value as RawBinaryCoStream}\n items={streamType.items}\n />\n );\n }\n\n if (streamType.type === \"coStream\") {\n return <RenderCoStream value={value} node={node} />;\n }\n\n if (streamType.type === \"unknown\") return <div>Unknown stream type</div>;\n\n return <div>Unknown stream type</div>;\n}\n\nfunction RenderBlobImage({ blob }: { blob: Blob }) {\n const urlCreator = window.URL || window.webkitURL;\n return <img src={urlCreator.createObjectURL(blob)} />;\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport {\n CoJsonType,\n ExtendedCoJsonType,\n useResolvedCoValue,\n} from \"./use-resolve-covalue.js\";\n\nconst IconText = styled(\"span\")`\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n`;\n\nconst UnavailableText = styled(\"div\")`\n font-weight: 500;\n`;\n\nconst EmptySpace = styled(\"div\")`\n white-space: pre;\n width: 3.5rem;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n`;\n\nexport const TypeIcon = ({\n type,\n extendedType,\n}: {\n type: CoJsonType;\n extendedType?: ExtendedCoJsonType;\n}) => {\n const iconMap: Record<ExtendedCoJsonType | CoJsonType, string> = {\n record: \"{} Record\",\n image: \"🖼️ Image\",\n comap: \"{} CoMap\",\n costream: \"≋ CoFeed\",\n colist: \"☰ CoList\",\n account: \"👤 Account\",\n group: \"👥 Group\",\n file: \"📃 FileStream\",\n };\n\n const iconKey = extendedType || type;\n const icon = iconMap[iconKey as keyof typeof iconMap];\n\n return icon ? <IconText>{icon}</IconText> : null;\n};\n\nexport const ResolveIcon = ({\n coId,\n node,\n}: {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n}) => {\n const { type, extendedType, snapshot } = useResolvedCoValue(coId, node);\n\n if (snapshot === \"unavailable\" && !type) {\n return <UnavailableText>Unavailable</UnavailableText>;\n }\n\n if (!type) return <EmptySpace> </EmptySpace>;\n\n return <TypeIcon type={type} extendedType={extendedType} />;\n};\n","import { CoID, RawCoValue } from \"cojson\";\n\nexport type PageInfo = {\n coId: CoID<RawCoValue>;\n name?: string;\n};\n\nexport const isCoId = (coId: unknown): coId is CoID<RawCoValue> =>\n typeof coId === \"string\" &&\n coId.startsWith(\"co_\") &&\n !coId.includes(\"inviteSecret\");\n","import { CoID, JsonValue, LocalNode, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport React, { useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { Icon } from \"../ui/icon.js\";\nimport { Text } from \"../ui/text.js\";\nimport { isCoId } from \"./types.js\";\nimport { isBrowserImage, useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\nconst LinkContainer = styled(\"span\")`\n display: inline-flex;\n gap: 0.25rem;\n align-items: center;\n`;\n\nconst BooleanText = styled(\"span\")<{ value: boolean }>`\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n ${(props) =>\n props.value\n ? `\n color: var(--j-success-color);\n `\n : `\n color: var(--j-destructive-color);\n `}\n`;\n\nconst ObjectContent = styled(\"pre\")`\n margin-top: 0.375rem;\n font-size: 0.875rem;\n white-space: pre-wrap;\n`;\n\nconst PreviewContainer = styled(\"div\")`\n font-size: 0.875rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n align-items: flex-start;\n`;\n\nconst PreviewGrid = styled(\"div\")`\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0.5rem;\n`;\n\nconst PreviewMoreText = styled(Text)`\n text-align: left;\n margin-top: 0.5rem;\n`;\n\nconst ImagePreviewContainer = styled(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n`;\n\nconst PreviewImage = styled(\"img\")`\n width: 2rem;\n height: 2rem;\n border: 2px solid white;\n box-shadow: var(--j-shadow-sm);\n margin: 0.5rem 0;\n`;\n\nconst RecordText = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.25rem;\n`;\n\nconst ListText = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.25rem;\n`;\n\n// Is there a chance we can pass the actual CoValue here?\nexport function ValueRenderer({\n json,\n onCoIDClick,\n compact,\n}: {\n json: JsonValue | undefined;\n onCoIDClick?: (childNode: CoID<RawCoValue>) => void;\n compact?: boolean;\n}) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (typeof json === \"undefined\" || json === undefined) {\n return <Text muted>undefined</Text>;\n }\n\n if (json === null) {\n return <Text muted>null</Text>;\n }\n\n if (typeof json === \"string\" && isCoId(json)) {\n const content = (\n <>\n {json}\n {onCoIDClick && <Icon name=\"link\" />}\n </>\n );\n\n if (onCoIDClick) {\n return (\n <Button\n variant=\"link\"\n onClick={() => {\n onCoIDClick?.(json as CoID<RawCoValue>);\n }}\n >\n {content}\n </Button>\n );\n }\n\n return <LinkContainer>{content}</LinkContainer>;\n }\n\n if (typeof json === \"string\") {\n return <Text>{json}</Text>;\n }\n\n if (typeof json === \"number\") {\n return <Text mono>{json}</Text>;\n }\n\n if (typeof json === \"boolean\") {\n return <BooleanText value={json}>{json.toString()}</BooleanText>;\n }\n const longJson = JSON.stringify(json, null, 2);\n const shortJson = longJson\n .split(\"\\n\")\n .slice(0, compact ? 3 : 8)\n .join(\"\\n\");\n\n // Check if collapsed differs from full\n const hasDifference = longJson !== shortJson;\n\n if (typeof json === \"object\") {\n return (\n <>\n <p>{Array.isArray(json) ? <>Array ({json.length})</> : <>Object</>}</p>\n <ObjectContent>\n {isExpanded ? longJson : shortJson}\n\n {hasDifference && !isExpanded ? \"\\n ...\" : null}\n </ObjectContent>\n\n {!compact && hasDifference ? (\n <Button variant=\"link\" onClick={() => setIsExpanded(!isExpanded)}>\n {isExpanded ? \"Show less\" : \"Show more\"}\n </Button>\n ) : null}\n </>\n );\n }\n\n return <span>{String(json)}</span>;\n}\n\nexport const CoMapPreview = ({\n coId,\n node,\n limit = 6,\n}: {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n limit?: number;\n}) => {\n const { value, snapshot, type, extendedType } = useResolvedCoValue(\n coId,\n node,\n );\n\n if (!snapshot) {\n return (\n <div\n style={{\n borderRadius: \"0.25rem\",\n backgroundColor: \"var(--j-foreground)\",\n animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n whiteSpace: \"pre\",\n width: \"6rem\",\n }}\n >\n {\" \"}\n </div>\n );\n }\n\n if (snapshot === \"unavailable\" && !value) {\n return (\n <Text inline muted>\n Unavailable\n </Text>\n );\n }\n\n if (extendedType === \"image\" && isBrowserImage(snapshot)) {\n return (\n <ImagePreviewContainer>\n <PreviewImage src={snapshot.placeholderDataURL} />\n <Text inline small muted>\n {snapshot.originalSize[0]} x {snapshot.originalSize[1]}\n </Text>\n </ImagePreviewContainer>\n );\n }\n\n if (extendedType === \"record\") {\n return (\n <RecordText>\n Record{\" \"}\n <Text inline muted>\n ({Object.keys(snapshot).length})\n </Text>\n </RecordText>\n );\n }\n\n if (type === \"colist\") {\n return (\n <ListText>\n List{\" \"}\n <Text inline muted>\n ({(snapshot as unknown as []).length})\n </Text>\n </ListText>\n );\n }\n\n const properties = Object.entries(snapshot);\n const limitedProperties =\n extendedType === \"account\"\n ? properties\n .filter(\n ([key]) =>\n !key.startsWith(\"key_z\") &&\n !key.startsWith(\"sealer_z\") &&\n key !== \"readKey\",\n )\n .slice(0, limit)\n : properties.slice(0, limit);\n\n return (\n <PreviewContainer>\n <PreviewGrid>\n {limitedProperties.map(([key, value]) => (\n <React.Fragment key={key}>\n <Text strong>{key}: </Text>\n <ValueRenderer compact json={value} />\n </React.Fragment>\n ))}\n </PreviewGrid>\n {properties.length > limit && (\n <PreviewMoreText muted small>\n {properties.length - limit} more\n </PreviewMoreText>\n )}\n </PreviewContainer>\n );\n};\n","export function ChevronDownIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n","export function DeleteIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-trash-icon lucide-trash\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n","export function LinkIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244\"\n />\n </svg>\n );\n}\n","import { ChevronDownIcon } from \"./icons/chevron-down-icon.js\";\nimport { DeleteIcon } from \"./icons/delete-icon.js\";\nimport { LinkIcon } from \"./icons/link-icon.js\";\n\nconst icons = {\n chevronDown: ChevronDownIcon,\n delete: DeleteIcon,\n link: LinkIcon,\n};\n\n// copied from tailwind line height https://tailwindcss.com/docs/font-size\nconst sizes = {\n \"2xs\": 14,\n xs: 16,\n sm: 20,\n md: 24,\n lg: 28,\n xl: 28,\n \"2xl\": 32,\n \"3xl\": 36,\n \"4xl\": 40,\n \"5xl\": 48,\n \"6xl\": 60,\n \"7xl\": 72,\n \"8xl\": 96,\n \"9xl\": 128,\n};\n\nconst strokeWidths = {\n \"2xs\": 2.5,\n xs: 2,\n sm: 2,\n md: 1.5,\n lg: 1.5,\n xl: 1.5,\n \"2xl\": 1.25,\n \"3xl\": 1.25,\n \"4xl\": 1.25,\n \"5xl\": 1,\n \"6xl\": 1,\n \"7xl\": 1,\n \"8xl\": 1,\n \"9xl\": 1,\n};\n\nexport function Icon({\n name,\n size = \"md\",\n className,\n ...svgProps\n}: {\n name?: keyof typeof icons;\n size?: keyof typeof sizes;\n} & React.SVGProps<SVGSVGElement>) {\n if (!name || !icons.hasOwnProperty(name)) {\n throw new Error(`Icon not found: ${name}`);\n }\n\n // @ts-ignore\n const IconComponent = icons?.hasOwnProperty(name) ? icons[name] : icon;\n\n return (\n <IconComponent\n aria-hidden=\"true\"\n size={sizes[size]}\n strokeWidth={strokeWidths[size]}\n strokeLinecap=\"round\"\n {...svgProps}\n />\n );\n}\n","import { styled } from \"goober\";\nexport const Card = styled(\"div\")`\n background-color: var(--j-background);\n border-radius: var(--j-radius-lg);\n box-shadow: var(--j-shadow-sm);\n border: 1px solid var(--j-border-color);\n padding: 1rem;\n text-align: left;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n`;\n\nexport const CardHeader = styled(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const CardBody = styled(\"div\")`\n flex: 1;\n`;\n","import { styled } from \"goober\";\n\nconst GridThreeColumns = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(1, minmax(0, 1fr));\n gap: 1rem;\n \n @media (min-width: 768px) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n \n @media (min-width: 1280px) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n`;\n\nconst GridTwoColumns = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(1, minmax(0, 1fr));\n gap: 1rem;\n \n @media (min-width: 768px) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n`;\n\nconst GridOneColumn = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(1, minmax(0, 1fr));\n gap: 1rem;\n`;\n\nexport function Grid(\n props: React.HTMLAttributes<HTMLElement> & { cols: 1 | 2 | 3 },\n) {\n const { cols, children, ...rest } = props;\n\n switch (cols) {\n case 1:\n return <GridOneColumn {...rest}>{children}</GridOneColumn>;\n case 2:\n return <GridTwoColumns {...rest}>{children}</GridTwoColumns>;\n case 3:\n return <GridThreeColumns {...rest}>{children}</GridThreeColumns>;\n default:\n throw new Error(`Invalid number of columns: ${cols}`);\n }\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { JsonObject, JsonValue } from \"cojson\";\nimport { ResolveIcon } from \"./type-icon.js\";\nimport { PageInfo, isCoId } from \"./types.js\";\nimport { CoMapPreview, ValueRenderer } from \"./value-renderer.js\";\n\nimport { Badge } from \"../ui/badge.js\";\nimport { Card, CardBody, CardHeader } from \"../ui/card.js\";\nimport { Grid } from \"../ui/grid.js\";\nimport { Text } from \"../ui/text.js\";\n\nfunction GridItem({\n entry,\n onNavigate,\n node,\n}: {\n entry: [string, JsonValue | undefined];\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n const [key, value] = entry;\n const isCoValue = isCoId(value);\n\n const props = isCoValue\n ? {\n onClick: () =>\n onNavigate([{ coId: value as CoID<RawCoValue>, name: key }]),\n as: \"button\",\n }\n : {\n style: {\n backgroundColor: \"var(--j-foreground)\",\n borderColor: \"var(--j-foreground)\",\n },\n };\n\n return (\n <Card {...props}>\n <CardHeader>\n {isCoValue ? (\n <>\n <Text strong>{key}</Text>\n <Badge>\n <ResolveIcon coId={value as CoID<RawCoValue>} node={node} />\n </Badge>\n </>\n ) : (\n <Text strong>{key}</Text>\n )}\n </CardHeader>\n <CardBody style={{ wordBreak: \"break-word\" }}>\n {isCoValue ? (\n <CoMapPreview coId={value as CoID<RawCoValue>} node={node} />\n ) : (\n <ValueRenderer\n json={value}\n onCoIDClick={(coId) => {\n onNavigate([{ coId, name: key }]);\n }}\n />\n )}\n </CardBody>\n </Card>\n );\n}\n\nexport function GridView({\n data,\n onNavigate,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n const entries = Object.entries(data);\n\n return (\n <Grid cols={entries.length === 1 ? 1 : 3}>\n {entries.map((entry, childIndex) => (\n <GridItem\n entry={entry}\n onNavigate={onNavigate}\n node={node}\n key={childIndex}\n />\n ))}\n </Grid>\n );\n}\n","import { JsonObject } from \"cojson\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { Card, CardBody, CardHeader } from \"../ui/card.js\";\nimport { Text } from \"../ui/text.js\";\nimport { ValueRenderer } from \"./value-renderer.js\";\n\nfunction CopyButton({ data }: { data: JsonObject }) {\n const [copyCount, setCopyCount] = useState(0);\n const copied = copyCount > 0;\n const stringifiedData = JSON.stringify(data);\n\n useEffect(() => {\n if (copyCount > 0) {\n const timeout = setTimeout(() => setCopyCount(0), 1000);\n return () => {\n clearTimeout(timeout);\n };\n }\n }, [copyCount]);\n\n return (\n <Button\n style={{\n position: \"absolute\",\n top: \"10px\",\n right: \"10px\",\n }}\n onClick={() => {\n window.navigator.clipboard.writeText(stringifiedData).then(() => {\n setCopyCount((count) => count + 1);\n });\n }}\n variant=\"secondary\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </Button>\n );\n}\n\nexport function RawDataCard({ data }: { data: JsonObject }) {\n return (\n <Card style={{ position: \"relative\" }}>\n <CardHeader>\n <Text strong>Raw data</Text>\n <CopyButton data={data} />\n </CardHeader>\n <CardBody>\n <ValueRenderer json={data} />\n </CardBody>\n </Card>\n );\n}\n","import { JsonObject, LocalNode } from \"cojson\";\nimport { GridView } from \"./grid-view.js\";\nimport { RawDataCard } from \"./raw-data-card.js\";\nimport { PageInfo } from \"./types.js\";\n\nexport function AccountView({\n data,\n onNavigate,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n const readableData = { ...data };\n\n for (const key in readableData) {\n if (\n key === \"readKey\" ||\n key.startsWith(\"sealer_z\") ||\n key.startsWith(\"key_z\")\n ) {\n delete readableData[key];\n }\n }\n\n return (\n <>\n <GridView data={readableData} onNavigate={onNavigate} node={node} />\n\n <RawDataCard data={data} />\n </>\n );\n}\n","import { styled } from \"goober\";\nimport React from \"react\";\n\nconst StyledTable = styled(\"table\")`\n width: 100%;\n`;\n\nconst StyledThead = styled(\"thead\")`\n text-align: left;\n border-bottom: 1px solid var(--j-border-color);\n background-color: var(--j-neutral-100);\n\n @media (prefers-color-scheme: dark) {\n background-color: var(--j-neutral-925);\n }\n`;\n\nconst StyledTbody = styled(\"tbody\")`\n tr {\n border-bottom: 1px solid var(--j-border-color);\n\n &:last-child {\n border-bottom: none;\n }\n }\n`;\n\nconst StyledTh = styled(\"th\")`\n font-weight: 500;\n padding: 0.5rem 0.75rem;\n color: var(--j-text-color-strong);\n`;\n\nconst StyledTd = styled(\"td\")`\n padding: 0.5rem 0.75rem;\n`;\n\nexport const Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ children, ...props }, ref) => (\n <StyledTable ref={ref} {...props}>\n {children}\n </StyledTable>\n));\n\nexport const TableHead = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ children, ...props }, ref) => (\n <StyledThead ref={ref} {...props}>\n {children}\n </StyledThead>\n));\n\nexport const TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ children, ...props }, ref) => (\n <StyledTbody ref={ref} {...props}>\n {children}\n </StyledTbody>\n));\n\nexport const TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ children, ...props }, ref) => (\n <tr ref={ref} {...props}>\n {children}\n </tr>\n));\n\nexport const TableHeader = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ children, ...props }, ref) => (\n <StyledTh ref={ref} {...props}>\n {children}\n </StyledTh>\n));\n\nexport const TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ children, ...props }, ref) => (\n <StyledTd ref={ref} {...props}>\n {children}\n </StyledTd>\n));\n","import { JsonObject, LocalNode, RawAccount } from \"cojson\";\nimport { CoID } from \"cojson\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table.js\";\nimport { Text } from \"../ui/text.js\";\nimport { AccountOrGroupText } from \"./account-or-group-text.js\";\nimport { RawDataCard } from \"./raw-data-card.js\";\nimport { PageInfo, isCoId } from \"./types.js\";\n\nexport function GroupView({\n data,\n onNavigate,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n return (\n <>\n <Text strong>Members</Text>\n\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Account</TableHeader>\n <TableHeader>Permission</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {\"everyone\" in data && typeof data.everyone === \"string\" ? (\n <TableRow>\n <TableCell>everyone</TableCell>\n <TableCell>{data.everyone}</TableCell>\n </TableRow>\n ) : null}\n\n {Object.entries(data).map(([key, value]) =>\n isCoId(key) ? (\n <TableRow key={key}>\n <TableCell>\n <AccountOrGroupText\n coId={key as CoID<RawAccount>}\n node={node}\n showId\n onClick={() => {\n onNavigate([{ coId: key, name: key }]);\n }}\n />\n </TableCell>\n <TableCell>{value as string}</TableCell>\n </TableRow>\n ) : null,\n )}\n </TableBody>\n </Table>\n\n <RawDataCard data={data} />\n </>\n );\n}\n","import { LocalNode, RawCoValue } from \"cojson\";\nimport { Text } from \"../ui/text.js\";\nimport { useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\nexport function RoleDisplay({\n node,\n value,\n}: { node: LocalNode; value: RawCoValue }) {\n const { snapshot } = useResolvedCoValue(value.group.id, node);\n\n if (!snapshot || snapshot === \"unavailable\") {\n return null;\n }\n\n let role;\n\n if (value.group.id == node.getCurrentAgent().id) {\n role = \"owner\";\n } else if (snapshot[node.getCurrentAgent().id]) {\n role = snapshot[node.getCurrentAgent().id] as string;\n } else if (snapshot.everyone) {\n role = snapshot.everyone as string;\n } else {\n role = \"unauthorized\";\n }\n\n return <Text>Role: {role}</Text>;\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport type { JsonObject } from \"cojson\";\nimport { styled } from \"goober\";\nimport { useMemo, useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { PageInfo, isCoId } from \"./types.js\";\nimport { useResolvedCoValues } from \"./use-resolve-covalue.js\";\nimport { ValueRenderer } from \"./value-renderer.js\";\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table.js\";\nimport { Text } from \"../ui/text.js\";\n\nconst PaginationContainer = styled(\"div\")`\n padding: 1rem 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n`;\n\nfunction CoValuesTableView({\n data,\n node,\n onNavigate,\n}: {\n data: JsonObject;\n node: LocalNode;\n onNavigate: (pages: PageInfo[]) => void;\n}) {\n const [visibleRowsCount, setVisibleRowsCount] = useState(10);\n const [coIdArray, visibleRows] = useMemo(() => {\n const coIdArray = Array.isArray(data)\n ? data\n : Object.values(data).every((k) => typeof k === \"string\" && isCoId(k))\n ? Object.values(data).map((k) => k as CoID<RawCoValue>)\n : [];\n\n const visibleRows = coIdArray.slice(0, visibleRowsCount);\n\n return [coIdArray, visibleRows];\n }, [data, visibleRowsCount]);\n const resolvedRows = useResolvedCoValues(visibleRows, node);\n\n const hasMore = visibleRowsCount < coIdArray.length;\n\n if (!coIdArray.length) {\n return <div>No data to display</div>;\n }\n\n if (resolvedRows.length === 0) {\n return <div>Loading...</div>;\n }\n\n const keys = Array.from(\n new Set(resolvedRows.flatMap((item) => Object.keys(item.snapshot || {}))),\n );\n\n const loadMore = () => {\n setVisibleRowsCount((prevVisibleRows) => prevVisibleRows + 10);\n };\n\n return (\n <>\n <Table>\n <TableHead>\n <TableRow>\n {[...keys, \"Action\"].map((key) => (\n <TableHeader key={key}>{key}</TableHeader>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {resolvedRows.slice(0, visibleRowsCount).map((item, index) => (\n <TableRow key={index}>\n {keys.map((key) => (\n <TableCell key={key}>\n <ValueRenderer\n json={(item.snapshot as JsonObject)[key]}\n onCoIDClick={(coId) => {\n async function handleClick() {\n onNavigate([\n {\n coId: item.value!.id,\n name: index.toString(),\n },\n {\n coId: coId,\n name: key,\n },\n ]);\n }\n\n handleClick();\n }}\n />\n </TableCell>\n ))}\n\n <TableCell>\n <Button\n variant=\"secondary\"\n onClick={() =>\n onNavigate([\n {\n coId: item.value!.id,\n name: index.toString(),\n },\n ])\n }\n >\n View\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <PaginationContainer>\n <Text muted small>\n Showing {Math.min(visibleRowsCount, coIdArray.length)} of{\" \"}\n {coIdArray.length}\n </Text>\n {hasMore && (\n <Button variant=\"secondary\" onClick={loadMore}>\n Load more\n </Button>\n )}\n </PaginationContainer>\n </>\n );\n}\n\nexport function TableView({\n data,\n node,\n onNavigate,\n}: {\n data: JsonObject;\n node: LocalNode;\n onNavigate: (pages: PageInfo[]) => void;\n}) {\n const isListOfCoValues = useMemo(() => {\n return Array.isArray(data) && data.every((k) => isCoId(k));\n }, [data]);\n\n // if data is a list of covalue ids, we need to resolve those covalues\n if (isListOfCoValues) {\n return (\n <CoValuesTableView data={data} node={node} onNavigate={onNavigate} />\n );\n }\n\n // if data is a list of primitives, we can render those values directly\n return (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader style={{ width: \"5rem\" }}>Index</TableHeader>\n <TableHeader>Value</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {Array.isArray(data) &&\n data?.map((value, index) => (\n <TableRow key={index}>\n <TableCell>\n <Text mono>{index}</Text>\n </TableCell>\n <TableCell>\n <ValueRenderer json={value} />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n","import { CoID, RawCoValue } from \"cojson\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { PageInfo } from \"./types.js\";\n\nconst STORAGE_KEY = \"jazz-inspector-paths\";\n\nexport function usePagePath(defaultPath?: PageInfo[]) {\n const [path, setPath] = useState<PageInfo[]>(() => {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n console.warn(\"Failed to parse stored path:\", e);\n }\n }\n return defaultPath || [];\n });\n\n const updatePath = useCallback((newPath: PageInfo[]) => {\n setPath(newPath);\n localStorage.setItem(STORAGE_KEY, JSON.stringify(newPath));\n }, []);\n\n useEffect(() => {\n if (defaultPath && JSON.stringify(path) !== JSON.stringify(defaultPath)) {\n updatePath(defaultPath);\n }\n }, [defaultPath, path, updatePath]);\n\n const addPages = useCallback(\n (newPages: PageInfo[]) => {\n updatePath([...path, ...newPages]);\n },\n [path, updatePath],\n );\n\n const goToIndex = useCallback(\n (index: number) => {\n updatePath(path.slice(0, index + 1));\n },\n [path, updatePath],\n );\n\n const setPage = useCallback(\n (coId: CoID<RawCoValue>) => {\n updatePath([{ coId, name: \"Root\" }]);\n },\n [updatePath],\n );\n\n const goBack = useCallback(() => {\n if (path.length > 1) {\n updatePath(path.slice(0, path.length - 1));\n }\n }, [path, updatePath]);\n\n return {\n path,\n setPage,\n addPages,\n goToIndex,\n goBack,\n };\n}\n","import { styled } from \"goober\";\n\nexport const GlobalStyles = styled(\"div\")`\n /* Colors */\n --j-primary-color: #146AFF;\n --j-link-color: var(--j-primary-color);\n --j-success-color: oklch(52.7% 0.154 150.069);\n --j-destructive-color: oklch(50.5% 0.213 27.518);\n \n /* Neutral Colors */\n --j-neutral-100: #faf8f8;\n --j-neutral-200: #e5e3e4;\n --j-neutral-300: #d0cecf;\n --j-neutral-400: #bbbaba;\n --j-neutral-500: #a8a6a6;\n --j-neutral-600: #858484;\n --j-neutral-700: #6b696a;\n --j-neutral-900: #2f2e2e;\n --j-neutral-925: #1b1a1a;\n --j-neutral-950: #151414;\n \n /* Text Colors */\n --j-text-color: var(--j-neutral-700);\n --j-text-color-strong: var(--j-neutral-900);\n\n /* Border Colors */\n --j-border-color: var(--j-neutral-200);\n --j-border-color-hover: var(--j-neutral-300);\n --j-border-dark: var(--j-neutral-900);\n --j-border-focus: var(--j-primary-color);\n\n /* Background Colors */\n --j-background: #FFFFFF;\n --j-foreground: var(--j-neutral-100);\n\n /* Border Radius */\n --j-radius-sm: 0.25rem;\n --j-radius-md: 0.375rem;\n --j-radius-lg: 0.5rem;\n\n /* Shadows */\n --j-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n\n @media (prefers-color-scheme: dark) {\n --j-text-color: var(--j-neutral-400);\n --j-border-color: var(--j-neutral-900);\n --j-background: var(--j-neutral-950);\n --j-foreground: var(--j-neutral-925);\n --j-border-color-hover: var(--j-neutral-700);\n --j-text-color-strong: var(--j-neutral-100);\n --j-success-color: oklch(72.3% 0.219 149.579);\n --j-destructive-color: oklch(63.7% 0.237 25.331);\n }\n \n *:focus {\n outline: none;\n }\n \n *:focus-visible {\n box-shadow: 0 0 0 2px var(--j-link-color);\n }\n \n .j-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n`;\n","import { styled } from \"goober\";\nimport React from \"react\";\n\nexport type Position =\n | \"bottom right\"\n | \"bottom left\"\n | \"top right\"\n | \"top left\"\n | \"right\"\n | \"left\";\n\nconst StyledInspectorButton = styled(\"button\")<{ position: Position }>`\n position: fixed;\n width: 2.5rem;\n height: 2.5rem;\n background-color: white;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n margin: 1rem;\n padding: 0.5rem !important;\n border: 1px solid #e5e3e4;\n border-radius: 0.375rem;\n z-index: 999;\n \n ${(props) => {\n switch (props.position) {\n case \"bottom right\":\n return \"bottom: 0; right: 0;\";\n case \"bottom left\":\n return \"bottom: 0; left: 0;\";\n case \"top right\":\n return \"top: 0; right: 0;\";\n case \"top left\":\n return \"top: 0; left: 0;\";\n case \"right\":\n return \"right: 0; top: 50%; transform: translateY(-50%);\";\n case \"left\":\n return \"left: 0; top: 50%; transform: translateY(-50%);\";\n default:\n return \"\";\n }\n }}\n`;\n\nconst JazzIcon = styled(\"svg\")`\n width: 100%;\n height: auto;\n position: relative;\n left: -1px;\n color: #146AFF;\n`;\n\nexport function InspectorButton({\n position = \"right\",\n ...buttonProps\n}: React.ComponentPropsWithoutRef<\"button\"> & { position?: Position }) {\n return (\n <StyledInspectorButton position={position} {...buttonProps}>\n <JazzIcon\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"119\"\n height=\"115\"\n viewBox=\"0 0 119 115\"\n fill=\"none\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M118.179 23.8277V0.167999C99.931 7.5527 79.9854 11.6192 59.0897 11.6192C47.1466 11.6192 35.5138 10.2908 24.331 7.7737V30.4076V60.1508C23.2955 59.4385 22.1568 58.8458 20.9405 58.3915C18.1732 57.358 15.128 57.0876 12.1902 57.6145C9.2524 58.1414 6.5539 59.4419 4.4358 61.3516C2.3178 63.2613 0.875401 65.6944 0.291001 68.3433C-0.293399 70.9921 0.00659978 73.7377 1.1528 76.2329C2.2991 78.728 4.2403 80.861 6.7308 82.361C9.2214 83.862 12.1495 84.662 15.1448 84.662C15.6054 84.662 15.8365 84.662 16.0314 84.659C26.5583 84.449 35.042 75.9656 35.2513 65.4386C35.2534 65.3306 35.2544 65.2116 35.2548 65.0486L35.2552 64.7149V64.5521V61.0762V32.1993C43.0533 33.2324 51.0092 33.7656 59.0897 33.7656C59.6696 33.7656 60.2489 33.7629 60.8276 33.7574V89.696C59.792 88.983 58.6533 88.391 57.437 87.936C54.6697 86.903 51.6246 86.632 48.6867 87.159C45.7489 87.686 43.0504 88.987 40.9323 90.896C38.8143 92.806 37.3719 95.239 36.7875 97.888C36.2032 100.537 36.5031 103.283 37.6494 105.778C38.7956 108.273 40.7368 110.405 43.2273 111.906C45.7179 113.406 48.646 114.207 51.6414 114.207C52.1024 114.207 52.3329 114.207 52.5279 114.203C63.0548 113.994 71.5385 105.51 71.7478 94.983C71.7517 94.788 71.7517 94.558 71.7517 94.097V90.621V33.3266C83.962 32.4768 95.837 30.4075 107.255 27.2397V59.9017C106.219 59.1894 105.081 58.5966 103.864 58.1424C101.097 57.1089 98.052 56.8384 95.114 57.3653C92.176 57.8922 89.478 59.1927 87.36 61.1025C85.242 63.0122 83.799 65.4453 83.215 68.0941C82.631 70.743 82.931 73.4886 84.077 75.9837C85.223 78.4789 87.164 80.612 89.655 82.112C92.145 83.612 95.073 84.413 98.069 84.413C98.53 84.413 98.76 84.413 98.955 84.409C109.482 84.2 117.966 75.7164 118.175 65.1895C118.179 64.9945 118.179 64.764 118.179 64.3029V60.8271V23.8277Z\"\n fill=\"currentColor\"\n />\n </JazzIcon>\n <span\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: \"0\",\n }}\n >\n Open Jazz Inspector\n </span>\n </StyledInspectorButton>\n );\n}\n","import { useEffect, useState } from \"react\";\n\nconst STORAGE_KEY = \"jazz-inspector-open\";\n\nexport function useOpenInspector() {\n const [open, setOpen] = useState(() => {\n // Initialize from localStorage if available\n const stored = localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : false;\n });\n\n // Update localStorage when open state changes\n useEffect(() => {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(open));\n }, [open]);\n\n return [open, setOpen];\n}\n","import { styled } from \"goober\";\nimport { useId } from \"react\";\nimport { Icon } from \"./icon.js\";\n\nconst SelectContainer = styled(\"div\")<{ className?: string }>`\n display: grid;\n gap: 0.25rem;\n`;\n\nconst SelectWrapper = styled(\"div\")`\n position: relative;\n display: flex;\n align-items: center;\n`;\n\nconst StyledSelect = styled(\"select\")`\n width: 100%;\n border-radius: var(--j-radius-md);\n border: 1px solid var(--j-border-color);\n padding: 0.5rem 0.875rem 0.5rem 0.875rem;\n padding-right: 2rem;\n box-shadow: var(--j-shadow-sm);\n font-weight: 500;\n color: var(--j-text-color-strong);\n appearance: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n @media (prefers-color-scheme: dark) {\n background-color: var(--j-foreground);\n }\n`;\n\nconst SelectIcon = styled(\"span\")`\n position: absolute;\n right: 0.5em;\n color: var(--j-neutral-400);\n pointer-events: none;\n\n @media (prefers-color-scheme: dark) {\n color: var(--j-neutral-900);\n }\n`;\n\nexport function Select(\n props: React.SelectHTMLAttributes<HTMLSelectElement> & {\n label: string;\n hideLabel?: boolean;\n },\n) {\n const { label, hideLabel, id: customId, className, ...selectProps } = props;\n const generatedId = useId();\n const id = customId || generatedId;\n\n return (\n <SelectContainer className={className}>\n <label htmlFor={id} className={hideLabel ? \"j-sr-only\" : \"\"}>\n {label}\n </label>\n\n <SelectWrapper>\n <StyledSelect {...selectProps} id={id}>\n {props.children}\n </StyledSelect>\n\n <SelectIcon>\n <Icon name=\"chevronDown\" size=\"sm\" />\n </SelectIcon>\n </SelectWrapper>\n </SelectContainer>\n );\n}\n"],"mappings":"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","names":["React","styled","useState","styled","forwardRef","jsx","styled","jsx","jsxs","styled","styled","styled","React","styled","jsx","styled","jsx","styled","React","jsx","useEffect","useState","useEffect","useState","styled","jsx","jsxs","styled","useState","useEffect","Fragment","jsx","useState","useEffect","styled","jsx","styled","icon","styled","React","useState","jsx","jsx","jsxs","jsx","jsx","Fragment","jsx","jsxs","styled","ImagePreviewContainer","useState","value","React","styled","styled","jsx","Fragment","jsx","jsxs","useEffect","useState","jsx","jsxs","useState","useEffect","Fragment","jsx","jsxs","styled","React","jsx","Fragment","jsx","jsxs","jsxs","styled","useState","Fragment","jsx","jsxs","styled","useState","coIdArray","visibleRows","Fragment","jsx","jsxs","React","styled","Fragment","jsx","jsxs","styled","useEffect","useState","styled","styled","jsx","jsxs","useEffect","useState","STORAGE_KEY","Fragment","jsx","jsxs","styled","HeaderContainer","useState","styled","useId","jsx","jsxs","styled","useId","React"]}
|
1
|
+
{"version":3,"sources":["../../src/inspector/index.ts","../../src/inspector/viewer/new-app.tsx","../../src/inspector/ui/button.tsx","../../src/inspector/ui/input.tsx","../../src/inspector/viewer/breadcrumbs.tsx","../../src/inspector/viewer/page-stack.tsx","../../src/inspector/viewer/page.tsx","../../src/inspector/ui/badge.tsx","../../src/inspector/ui/heading.tsx","../../src/inspector/ui/text.tsx","../../src/inspector/viewer/account-or-group-text.tsx","../../src/inspector/viewer/use-resolve-covalue.ts","../../src/inspector/viewer/co-stream-view.tsx","../../src/inspector/viewer/type-icon.tsx","../../src/inspector/viewer/types.ts","../../src/inspector/viewer/value-renderer.tsx","../../src/inspector/ui/icons/chevron-down-icon.tsx","../../src/inspector/ui/icons/delete-icon.tsx","../../src/inspector/ui/icons/link-icon.tsx","../../src/inspector/ui/icon.tsx","../../src/inspector/ui/card.tsx","../../src/inspector/ui/grid.tsx","../../src/inspector/viewer/grid-view.tsx","../../src/inspector/viewer/raw-data-card.tsx","../../src/inspector/viewer/account-view.tsx","../../src/inspector/viewer/co-plain-text-view.tsx","../../src/inspector/ui/table.tsx","../../src/inspector/viewer/group-view.tsx","../../src/inspector/viewer/role-display.tsx","../../src/inspector/viewer/table-viewer.tsx","../../src/inspector/viewer/use-page-path.ts","../../src/inspector/ui/global-styles.tsx","../../src/inspector/viewer/inpsector-button.tsx","../../src/inspector/viewer/use-open-inspector.ts","../../src/inspector/ui/select.tsx"],"sourcesContent":["import React from \"react\";\n\nexport { JazzInspector, JazzInspectorInternal } from \"./viewer/new-app.js\";\nexport { PageStack } from \"./viewer/page-stack.js\";\nexport { Breadcrumbs } from \"./viewer/breadcrumbs.js\";\nexport { AccountOrGroupText } from \"./viewer/account-or-group-text.js\";\n\nexport { Button } from \"./ui/button.js\";\nexport { Input } from \"./ui/input.js\";\nexport { Select } from \"./ui/select.js\";\nexport { Icon } from \"./ui/icon.js\";\nexport { GlobalStyles } from \"./ui/global-styles.js\";\n\nexport {\n resolveCoValue,\n useResolvedCoValue,\n} from \"./viewer/use-resolve-covalue.js\";\n\nexport type { PageInfo } from \"./viewer/types.js\";\n\nimport { setup } from \"goober\";\n\nsetup(React.createElement);\n","import { CoID, LocalNode, RawAccount, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport { useJazzContext } from \"jazz-tools/react-core\";\nimport React, { useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { Input } from \"../ui/input.js\";\nimport { Breadcrumbs } from \"./breadcrumbs.js\";\nimport { PageStack } from \"./page-stack.js\";\nimport { usePagePath } from \"./use-page-path.js\";\n\nimport { Account } from \"jazz-tools\";\nimport { GlobalStyles } from \"../ui/global-styles.js\";\nimport { Heading } from \"../ui/heading.js\";\nimport { InspectorButton, type Position } from \"./inpsector-button.js\";\nimport { useOpenInspector } from \"./use-open-inspector.js\";\n\nconst InspectorContainer = styled(\"div\")`\n position: fixed;\n height: 50vh;\n max-height: 800px;\n display: flex;\n flex-direction: column;\n bottom: 0;\n left: 0;\n width: 100%;\n background-color: white;\n border-top: 1px solid var(--j-border-color);\n color: var(--j-text-color);\n \n @media (prefers-color-scheme: dark) {\n background-color: var(--j-background);\n }\n`;\n\nconst HeaderContainer = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 0 0.75rem;\n margin: 0.75rem 0;\n`;\n\nconst Form = styled(\"form\")`\n width: 24rem;\n`;\n\nconst InitialForm = styled(\"form\")`\n display: flex;\n flex-direction: column;\n position: relative;\n top: -1.5rem;\n justify-content: center;\n gap: 0.5rem;\n height: 100%;\n width: 100%;\n max-width: 24rem;\n margin: 0 auto;\n`;\n\nconst OrText = styled(\"p\")`\n text-align: center;\n`;\n\nexport function JazzInspector({ position = \"right\" }: { position?: Position }) {\n const context = useJazzContext<Account>();\n const localNode = context.node;\n const me = \"me\" in context ? context.me : undefined;\n\n if (process.env.NODE_ENV !== \"development\") return null;\n\n return (\n <JazzInspectorInternal\n position={position}\n localNode={localNode}\n accountId={me?._raw.id}\n />\n );\n}\n\nexport function JazzInspectorInternal({\n position = \"right\",\n localNode,\n accountId,\n}: {\n position?: Position;\n localNode?: LocalNode;\n accountId?: CoID<RawAccount>;\n}) {\n const [open, setOpen] = useOpenInspector();\n const [coValueId, setCoValueId] = useState<CoID<RawCoValue> | \"\">(\"\");\n const { path, addPages, goToIndex, goBack, setPage } = usePagePath();\n\n const handleCoValueIdSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (coValueId) {\n setPage(coValueId);\n }\n setCoValueId(\"\");\n };\n\n if (!open) {\n return (\n <InspectorButton position={position} onClick={() => setOpen(true)} />\n );\n }\n\n return (\n <InspectorContainer as={GlobalStyles} style={{ zIndex: 999 }}>\n <HeaderContainer>\n <Breadcrumbs path={path} onBreadcrumbClick={goToIndex} />\n <Form onSubmit={handleCoValueIdSubmit}>\n {path.length !== 0 && (\n <Input\n label=\"CoValue ID\"\n style={{ fontFamily: \"monospace\" }}\n hideLabel\n placeholder=\"co_z1234567890abcdef123456789\"\n value={coValueId}\n onChange={(e) => setCoValueId(e.target.value as CoID<RawCoValue>)}\n />\n )}\n </Form>\n <Button variant=\"plain\" type=\"button\" onClick={() => setOpen(false)}>\n Close\n </Button>\n </HeaderContainer>\n\n <PageStack\n path={path}\n node={localNode}\n goBack={goBack}\n addPages={addPages}\n >\n {path.length <= 0 && (\n <InitialForm\n onSubmit={handleCoValueIdSubmit}\n aria-hidden={path.length !== 0}\n >\n <Heading>Jazz CoValue Inspector</Heading>\n <Input\n label=\"CoValue ID\"\n style={{ minWidth: \"21rem\", fontFamily: \"monospace\" }}\n hideLabel\n placeholder=\"co_z1234567890abcdef123456789\"\n value={coValueId}\n onChange={(e) => setCoValueId(e.target.value as CoID<RawCoValue>)}\n />\n <Button type=\"submit\" variant=\"primary\">\n Inspect CoValue\n </Button>\n\n {accountId && (\n <>\n <OrText>or</OrText>\n\n <Button\n variant=\"secondary\"\n onClick={() => {\n setCoValueId(accountId);\n setPage(accountId);\n }}\n >\n Inspect my account\n </Button>\n </>\n )}\n </InitialForm>\n )}\n </PageStack>\n </InspectorContainer>\n );\n}\n","import { styled } from \"goober\";\nimport { forwardRef } from \"react\";\n\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"link\" | \"plain\";\n children?: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nconst StyledButton = styled(\"button\")<{ variant: string; disabled?: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n text-align: center;\n transition: colors 0.2s;\n border-radius: var(--j-radius-lg);\n pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n cursor: ${(props) => (props.disabled ? \"not-allowed\" : \"pointer\")};\n\n ${(props) => {\n switch (props.variant) {\n case \"primary\":\n return `\n padding: 0.375rem 0.75rem;\n background-color: var(--j-primary-color);\n border-color: var(--j-primary-color);\n color: white;\n font-weight: 500;\n `;\n case \"secondary\":\n return `\n padding: 0.375rem 0.75rem;\n color: var(--j-text-color-strong);\n border: 1px solid var(--j-border-color);\n font-weight: 500;\n &:hover {\n border-color: var(--j-border-color-hover);\n }\n `;\n case \"link\":\n return `\n color: var(--j-link-color);\n &:hover {\n text-decoration: underline;\n }\n `;\n default:\n return \"\";\n }\n }}\n`;\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n children,\n variant = \"primary\",\n disabled,\n type = \"button\",\n ...buttonProps\n },\n ref,\n ) => {\n return (\n <StyledButton\n ref={ref}\n {...buttonProps}\n disabled={disabled}\n className={className}\n type={type}\n variant={variant}\n >\n {children}\n </StyledButton>\n );\n },\n);\n","import { styled } from \"goober\";\nimport { forwardRef, useId } from \"react\";\n\ninterface LabelProps {\n hideLabel?: boolean;\n}\n\ninterface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n LabelProps {\n // label can be hidden with a \"label:sr-only\" className\n label: string;\n className?: string;\n id?: string;\n}\n\nconst Container = styled(\"div\")`\n display: grid;\n gap: 0.25rem;\n`;\n\nconst StyledInput = styled(\"input\")`\n width: 100%;\n border-radius: var(--j-radius-md);\n border: 1px solid var(--j-border-color);\n padding: 0.5rem 0.875rem;\n box-shadow: var(--j-shadow-sm);\n font-weight: 500;\n background-color: white;\n color: var(--text-color-strong);\n\n @media (prefers-color-scheme: dark) {\n background-color: var(--j-foreground);\n }\n`;\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ label, className, hideLabel, id: customId, ...inputProps }, ref) => {\n const generatedId = useId();\n const id = customId || generatedId;\n\n return (\n <Container className={className}>\n <label htmlFor={id} className={hideLabel ? \"j-sr-only\" : \"\"}>\n {label}\n </label>\n <StyledInput ref={ref} {...inputProps} id={id} />\n </Container>\n );\n },\n);\n","import { styled } from \"goober\";\nimport React from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { PageInfo } from \"./types.js\";\n\nconst BreadcrumbsContainer = styled(\"div\")`\n position: relative;\n z-index: 20;\n flex: 1;\n display: flex;\n align-items: center;\n`;\n\nconst Separator = styled(\"span\")`\n padding: 0 0.125rem;\n`;\n\ninterface BreadcrumbsProps {\n path: PageInfo[];\n onBreadcrumbClick: (index: number) => void;\n}\n\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({\n path,\n onBreadcrumbClick,\n}) => {\n return (\n <BreadcrumbsContainer>\n <Button\n variant=\"link\"\n style={{ padding: \"0 0.25rem\" }}\n onClick={() => onBreadcrumbClick(-1)}\n >\n Home\n </Button>\n {path.map((page, index) => {\n return (\n <React.Fragment key={page.coId}>\n <Separator aria-hidden>/</Separator>\n <Button\n variant=\"link\"\n style={{ padding: \"0 0.25rem\" }}\n onClick={() => onBreadcrumbClick(index)}\n >\n {index === 0 ? page.name || \"Root\" : page.name}\n </Button>\n </React.Fragment>\n );\n })}\n </BreadcrumbsContainer>\n );\n};\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport { Page } from \"./page.js\";\n\n// Define the structure of a page in the path\ninterface PageInfo {\n coId: CoID<RawCoValue>;\n name?: string;\n}\n\n// Props for the PageStack component\ninterface PageStackProps {\n path: PageInfo[];\n node?: LocalNode | null;\n goBack: () => void;\n addPages: (pages: PageInfo[]) => void;\n children?: React.ReactNode;\n}\n\nconst PageStackContainer = styled(\"div\")`\n position: relative;\n padding: 0 0.75rem;\n overflow-y: auto;\n flex: 1;\n color: var(--j-text-color);\n font-size: 16px;\n`;\n\nexport function PageStack({\n path,\n node,\n goBack,\n addPages,\n children,\n}: PageStackProps) {\n const page = path[path.length - 1];\n const index = path.length - 1;\n\n return (\n <>\n <PageStackContainer>\n {children}\n {node && page && (\n <Page\n coId={page.coId}\n node={node}\n name={page.name || page.coId}\n onHeaderClick={goBack}\n onNavigate={addPages}\n isTopLevel={index === path.length - 1}\n />\n )}\n </PageStackContainer>\n </>\n );\n}\n","import { CoID, LocalNode, RawCoStream, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport React from \"react\";\nimport { Badge } from \"../ui/badge.js\";\nimport { Heading } from \"../ui/heading.js\";\nimport { Text } from \"../ui/text.js\";\nimport { AccountOrGroupText } from \"./account-or-group-text.js\";\nimport { AccountView } from \"./account-view.js\";\nimport { CoPlainTextView } from \"./co-plain-text-view.js\";\nimport { CoStreamView } from \"./co-stream-view.js\";\nimport { GridView } from \"./grid-view.js\";\nimport { GroupView } from \"./group-view.js\";\nimport { RoleDisplay } from \"./role-display.js\";\nimport { TableView } from \"./table-viewer.js\";\nimport { TypeIcon } from \"./type-icon.js\";\nimport { PageInfo } from \"./types.js\";\nimport { resolveCoValue, useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\ninterface PageContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n isTopLevel?: boolean;\n}\n\nconst BasePageContainer = React.forwardRef<HTMLDivElement, PageContainerProps>(\n ({ isTopLevel, ...rest }, ref) => <div ref={ref} {...rest} />,\n);\n\nconst PageContainer = styled(BasePageContainer)<PageContainerProps>`\n position: absolute;\n z-index: 10;\n inset: 0;\n width: 100%;\n height: 100%;\n padding: 0 0.75rem;\n`;\n\nconst BackButton = styled(\"div\")`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n height: 2.5rem;\n`;\n\nconst HeaderContainer = styled(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n`;\n\nconst TitleContainer = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.75rem;\n`;\n\nconst Title = styled(Heading)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 0.25rem;\n`;\n\nconst BadgeContainer = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.75rem;\n`;\n\nconst ContentContainer = styled(\"div\")`\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n padding-bottom: 2rem;\n`;\n\ntype PageProps = {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n name: string;\n onNavigate: (newPages: PageInfo[]) => void;\n onHeaderClick?: () => void;\n isTopLevel?: boolean;\n style?: React.CSSProperties;\n className?: string;\n};\n\nfunction View(\n props: PageProps & { coValue: Awaited<ReturnType<typeof resolveCoValue>> },\n) {\n const { type, extendedType } = props.coValue;\n const { snapshot, value } = props.coValue;\n const { node, onNavigate } = props;\n\n if (!snapshot || snapshot === \"unavailable\") return;\n\n if (type === \"costream\") {\n return (\n <CoStreamView\n data={snapshot}\n onNavigate={onNavigate}\n node={node}\n value={value as RawCoStream}\n />\n );\n }\n\n if (extendedType === \"group\") {\n return <GroupView data={snapshot} node={node} onNavigate={onNavigate} />;\n }\n\n if (extendedType === \"account\") {\n return <AccountView data={snapshot} node={node} onNavigate={onNavigate} />;\n }\n\n if (type === \"coplaintext\") {\n return <CoPlainTextView data={snapshot} />;\n }\n\n if (type === \"colist\" || extendedType === \"record\") {\n return <TableView data={snapshot} node={node} onNavigate={onNavigate} />;\n }\n\n return <GridView data={snapshot} onNavigate={onNavigate} node={node} />;\n}\n\nexport function Page(props: PageProps) {\n const {\n coId,\n node,\n name,\n onNavigate,\n onHeaderClick,\n style,\n className = \"\",\n isTopLevel,\n } = props;\n const coValue = useResolvedCoValue(coId, node);\n\n const { value, snapshot, type, extendedType } = coValue;\n\n if (snapshot === \"unavailable\") {\n return <div style={style}>Data unavailable</div>;\n }\n\n if (!snapshot) {\n return <div style={style}></div>;\n }\n\n return (\n <PageContainer style={style} className={className} isTopLevel={isTopLevel}>\n {!isTopLevel && (\n <BackButton\n aria-label=\"Back\"\n onClick={() => {\n onHeaderClick?.();\n }}\n aria-hidden=\"true\"\n ></BackButton>\n )}\n <HeaderContainer>\n <TitleContainer>\n <Title>\n <span>\n {name}\n {typeof snapshot === \"object\" && \"name\" in snapshot ? (\n <span style={{ color: \"#57534e\", fontWeight: 500 }}>\n {\" \"}\n {(snapshot as { name: string }).name}\n </span>\n ) : null}\n </span>\n </Title>\n <BadgeContainer>\n <Badge>\n {type && <TypeIcon type={type} extendedType={extendedType} />}\n </Badge>\n <Badge>{coId}</Badge>\n </BadgeContainer>\n </TitleContainer>\n </HeaderContainer>\n <ContentContainer>\n <View {...props} coValue={coValue} />\n {extendedType !== \"account\" && extendedType !== \"group\" && (\n <>\n <RoleDisplay node={node} value={value} />\n <Text muted>\n Owned by{\" \"}\n <AccountOrGroupText\n coId={value.group.id}\n node={node}\n showId\n onClick={() => {\n onNavigate([{ coId: value.group.id, name: \"owner\" }]);\n }}\n />\n </Text>\n </>\n )}\n </ContentContainer>\n </PageContainer>\n );\n}\n","import { styled } from \"goober\";\n\nconst StyledBadge = styled(\"span\")<{ className?: string }>`\n font-size: 0.875rem;\n font-weight: 500;\n padding: 0.125rem 0.25rem;\n margin-left: -0.125rem;\n border-radius: var(--j-radius-sm);\n background-color: var(--j-foreground);\n display: inline-block;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: var(--j-text-color-strong);\n`;\n\nexport function Badge({\n children,\n className,\n}: React.PropsWithChildren<{ className?: string }>) {\n return <StyledBadge className={className}>{children}</StyledBadge>;\n}\n","import { styled } from \"goober\";\n\nconst StyledHeading = styled(\"h1\")<{ className?: string }>`\n font-size: 1.125rem;\n text-align: center;\n font-weight: 500;\n color: var(--j-text-color-strong);\n`;\n\nexport function Heading({\n children,\n className,\n}: React.PropsWithChildren<{ className?: string }>) {\n return <StyledHeading className={className}>{children}</StyledHeading>;\n}\n","import { styled } from \"goober\";\nimport React from \"react\";\n\ninterface TextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n muted?: boolean;\n strong?: boolean;\n small?: boolean;\n inline?: boolean;\n mono?: boolean;\n}\n\nconst BaseText = React.forwardRef<HTMLParagraphElement, TextProps>(\n ({ muted, strong, small, inline, mono, ...rest }, ref) => (\n <div ref={ref} {...rest} />\n ),\n);\n\nconst StyledText = styled(BaseText)<TextProps>`\n ${(props) =>\n props.muted &&\n `\n color: var(--j-neutral-500);\n `}\n\n ${(props) =>\n props.strong &&\n `\n font-weight: 500;\n color: var(--j-text-color-strong);\n `}\n\n ${(props) =>\n props.small &&\n `\n font-size: 0.875rem;\n `}\n\n ${(props) =>\n props.inline &&\n `\n display: inline;\n `}\n\n ${(props) =>\n props.mono &&\n `\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n `}\n`;\n\nexport function Text(\n props: React.PropsWithChildren<{\n className?: string;\n muted?: boolean;\n strong?: boolean;\n inline?: boolean;\n small?: boolean;\n mono?: boolean;\n }>,\n) {\n return <StyledText {...props} />;\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { resolveCoValue, useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\nexport function AccountOrGroupText({\n coId,\n node,\n showId = false,\n onClick,\n}: {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n showId?: boolean;\n onClick?: (name?: string) => void;\n}) {\n const { snapshot, extendedType } = useResolvedCoValue(coId, node);\n const [name, setName] = useState<string | null>(null);\n\n useEffect(() => {\n if (snapshot && typeof snapshot === \"object\" && \"profile\" in snapshot) {\n const profileId = snapshot.profile as CoID<RawCoValue>;\n resolveCoValue(profileId, node).then((profileResult) => {\n if (\n profileResult.snapshot &&\n typeof profileResult.snapshot === \"object\" &&\n \"name\" in profileResult.snapshot\n ) {\n setName(profileResult.snapshot.name as string);\n }\n });\n }\n }, [snapshot, node, extendedType]);\n\n if (!snapshot) return <span>Loading...</span>;\n if (extendedType !== \"account\" && extendedType !== \"group\") {\n return <span>CoID is not an account or group</span>;\n }\n\n const displayName = extendedType === \"account\" ? name || \"Account\" : \"Group\";\n const displayText = showId ? `${displayName} <${coId}>` : displayName;\n\n if (onClick) {\n return (\n <Button variant=\"link\" onClick={() => onClick(displayName)}>\n {displayText}\n </Button>\n );\n }\n\n return <>{displayText}</>;\n}\n","import {\n CoID,\n LocalNode,\n RawBinaryCoStream,\n RawCoStream,\n RawCoValue,\n} from \"cojson\";\nimport { useEffect, useState } from \"react\";\nimport { detectCoStreamType } from \"./co-stream-view.js\";\n\nexport type CoJsonType = \"comap\" | \"costream\" | \"colist\" | \"coplaintext\";\nexport type ExtendedCoJsonType =\n | \"image\"\n | \"record\"\n | \"account\"\n | \"group\"\n | \"file\";\n\ntype JSON = string | number | boolean | null | JSON[] | { [key: string]: JSON };\ntype JSONObject = { [key: string]: JSON };\n\ntype ResolvedImageDefinition = {\n originalSize: [number, number];\n placeholderDataURL?: string;\n [res: `${number}x${number}`]: RawBinaryCoStream[\"id\"];\n};\n\n// Type guard for browser image\nexport const isBrowserImage = (\n coValue: JSONObject,\n): coValue is ResolvedImageDefinition => {\n return \"originalSize\" in coValue && \"placeholderDataURL\" in coValue;\n};\n\nexport type ResolvedGroup = {\n readKey: string;\n [key: string]: JSON;\n};\n\nexport const isGroup = (coValue: JSONObject): coValue is ResolvedGroup => {\n return \"readKey\" in coValue;\n};\n\nexport type ResolvedAccount = {\n profile: {\n name: string;\n };\n [key: string]: JSON;\n};\n\nexport const isAccount = (coValue: JSONObject): coValue is ResolvedAccount => {\n return isGroup(coValue) && \"profile\" in coValue;\n};\n\nexport async function resolveCoValue(\n coValueId: CoID<RawCoValue>,\n node: LocalNode,\n): Promise<\n | {\n value: RawCoValue;\n snapshot: JSONObject;\n type: CoJsonType | null;\n extendedType: ExtendedCoJsonType | undefined;\n }\n | {\n value: undefined;\n snapshot: \"unavailable\";\n type: null;\n extendedType: undefined;\n }\n> {\n const value = await node.load(coValueId);\n\n if (value === \"unavailable\") {\n return {\n value: undefined,\n snapshot: \"unavailable\",\n type: null,\n extendedType: undefined,\n };\n }\n\n const snapshot = value.toJSON() as JSONObject;\n const type = value.type as CoJsonType;\n\n // Determine extended type\n let extendedType: ExtendedCoJsonType | undefined;\n\n if (type === \"comap\") {\n if (isBrowserImage(snapshot)) {\n extendedType = \"image\";\n } else if (isAccount(snapshot)) {\n extendedType = \"account\";\n } else if (isGroup(snapshot)) {\n extendedType = \"group\";\n }\n }\n\n return {\n value,\n snapshot,\n type,\n extendedType,\n };\n}\n\nfunction subscribeToCoValue(\n coValueId: CoID<RawCoValue>,\n node: LocalNode,\n callback: (result: Awaited<ReturnType<typeof resolveCoValue>>) => void,\n) {\n return node.subscribe(coValueId, (value) => {\n if (value === \"unavailable\") {\n callback({\n value: undefined,\n snapshot: \"unavailable\",\n type: null,\n extendedType: undefined,\n });\n } else {\n const snapshot = value.toJSON() as JSONObject;\n const type = value.type as CoJsonType;\n let extendedType: ExtendedCoJsonType | undefined;\n\n if (type === \"comap\") {\n if (isBrowserImage(snapshot)) {\n extendedType = \"image\";\n } else if (isAccount(snapshot)) {\n extendedType = \"account\";\n } else if (isGroup(snapshot)) {\n extendedType = \"group\";\n }\n } else if (type === \"costream\") {\n const coStream = detectCoStreamType(value as RawCoStream);\n\n if (coStream.type === \"binary\") {\n extendedType = \"file\";\n }\n }\n\n callback({\n value,\n snapshot,\n type,\n extendedType,\n });\n }\n });\n}\n\nexport function useResolvedCoValue(\n coValueId: CoID<RawCoValue>,\n node: LocalNode,\n) {\n const [result, setResult] =\n useState<Awaited<ReturnType<typeof resolveCoValue>>>();\n\n useEffect(() => {\n let isMounted = true;\n const unsubscribe = subscribeToCoValue(coValueId, node, (newResult) => {\n if (isMounted) {\n setResult(newResult);\n }\n });\n\n return () => {\n isMounted = false;\n unsubscribe();\n };\n }, [coValueId, node]);\n\n return (\n result || {\n value: undefined,\n snapshot: undefined,\n type: undefined,\n extendedType: undefined,\n }\n );\n}\n\nexport function useResolvedCoValues(\n coValueIds: CoID<RawCoValue>[],\n node: LocalNode,\n) {\n const [results, setResults] = useState<\n Awaited<ReturnType<typeof resolveCoValue>>[]\n >([]);\n\n useEffect(() => {\n let isMounted = true;\n const unsubscribes: (() => void)[] = [];\n\n coValueIds.forEach((coValueId, index) => {\n const unsubscribe = subscribeToCoValue(coValueId, node, (newResult) => {\n if (isMounted) {\n setResults((prevResults) => {\n const newResults = prevResults.slice(0, coValueIds.length);\n newResults[index] = newResult;\n return newResults;\n });\n }\n });\n unsubscribes.push(unsubscribe);\n });\n\n return () => {\n isMounted = false;\n unsubscribes.forEach((unsubscribe) => unsubscribe());\n };\n }, [coValueIds, node]);\n\n return results;\n}\n","import {\n CoID,\n LocalNode,\n RawBinaryCoStream,\n RawCoStream,\n RawCoValue,\n} from \"cojson\";\nimport { base64URLtoBytes } from \"cojson\";\nimport { BinaryStreamItem, BinaryStreamStart, CoStreamItem } from \"cojson\";\nimport type { JsonObject, JsonValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport { useEffect, useState } from \"react\";\nimport { Badge } from \"../ui/badge.js\";\nimport { Button } from \"../ui/button.js\";\nimport { AccountOrGroupText } from \"./account-or-group-text.js\";\nimport { PageInfo } from \"./types.js\";\n\n// typeguard for BinaryStreamStart\nfunction isBinaryStreamStart(item: unknown): item is BinaryStreamStart {\n return (\n typeof item === \"object\" &&\n item !== null &&\n \"type\" in item &&\n item.type === \"start\"\n );\n}\n\nexport function detectCoStreamType(value: RawCoStream | RawBinaryCoStream) {\n const firstKey = Object.keys(value.items)[0];\n if (!firstKey)\n return {\n type: \"unknown\",\n };\n\n const items = value.items[firstKey as never]?.map((v) => v.value);\n\n if (!items)\n return {\n type: \"unknown\",\n };\n const firstItem = items[0];\n if (!firstItem)\n return {\n type: \"unknown\",\n };\n // This is a binary stream\n if (isBinaryStreamStart(firstItem)) {\n return {\n type: \"binary\",\n items: items as BinaryStreamItem[],\n };\n } else {\n return {\n type: \"coStream\",\n };\n }\n}\n\nasync function getBlobFromCoStream({\n items,\n onlyFirstChunk = false,\n}: {\n items: BinaryStreamItem[];\n onlyFirstChunk?: boolean;\n}) {\n if (onlyFirstChunk && items.length > 1) {\n items = items.slice(0, 2);\n }\n\n const chunks: Uint8Array[] = [];\n\n const binary_U_prefixLength = 8;\n\n let lastProgressUpdate = Date.now();\n\n for (const item of items.slice(1)) {\n if (item.type === \"end\") {\n break;\n }\n\n if (item.type !== \"chunk\") {\n console.error(\"Invalid binary stream chunk\", item);\n return undefined;\n }\n\n const chunk = base64URLtoBytes(item.chunk.slice(binary_U_prefixLength));\n // totalLength += chunk.length;\n chunks.push(chunk);\n\n if (Date.now() - lastProgressUpdate > 100) {\n lastProgressUpdate = Date.now();\n }\n }\n const defaultMime =\n items[0] && \"mimeType\" in items[0] ? items[0].mimeType : null;\n\n const blob = new Blob(chunks, defaultMime ? { type: defaultMime } : {});\n\n const mimeType =\n defaultMime === \"\" ? await detectPDFMimeType(blob) : defaultMime;\n\n return {\n blob,\n mimeType: mimeType as string,\n unfinishedChunks: items.length > 1,\n totalSize:\n items[0] && \"totalSizeBytes\" in items[0]\n ? (items[0].totalSizeBytes as number)\n : undefined,\n };\n}\n\nconst detectPDFMimeType = async (blob: Blob): Promise<string> => {\n const arrayBuffer = await blob.slice(0, 4).arrayBuffer();\n const uint8Array = new Uint8Array(arrayBuffer);\n const header = uint8Array.reduce(\n (acc, byte) => acc + String.fromCharCode(byte),\n \"\",\n );\n\n if (header === \"%PDF\") {\n return \"application/pdf\";\n }\n return \"unknown\";\n};\n\nconst BinaryDownloadButton = ({\n pdfBlob,\n fileName = \"document\",\n label,\n mimeType,\n}: {\n pdfBlob: Blob;\n mimeType?: string;\n fileName?: string;\n label: string;\n}) => {\n const downloadFile = () => {\n const url = URL.createObjectURL(\n new Blob([pdfBlob], mimeType ? { type: mimeType } : {}),\n );\n const link = document.createElement(\"a\");\n link.href = url;\n link.download =\n mimeType === \"application/pdf\" ? `${fileName}.pdf` : fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n return (\n <Button variant=\"secondary\" onClick={downloadFile}>\n ⬇️ {label}\n {/* Download {mimeType === \"application/pdf\" ? \"PDF\" : \"File\"} */}\n </Button>\n );\n};\n\nconst LabelContentPairContainer = styled(\"div\")`\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n`;\n\nconst BinaryStreamGrid = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 0.5rem;\n max-width: 48rem;\n`;\n\nconst ImagePreviewContainer = styled(\"div\")`\n background-color: rgb(249 250 251);\n padding: 0.75rem;\n border-radius: var(--j-radius-md);\n @media (prefers-color-scheme: dark) {\n background-color: rgb(28 25 23);\n }\n`;\n\nconst CoStreamGrid = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 0.5rem;\n`;\n\nconst CoStreamItemContainer = styled(\"div\")`\n padding: 0.75rem;\n border-radius: var(--j-radius-lg);\n overflow: hidden;\n border: 1px solid rgb(229 231 235);\n cursor: pointer;\n box-shadow: var(--j-shadow-sm);\n &:hover {\n background-color: rgb(243 244 246 / 0.05);\n }\n`;\n\nconst LabelContentPair = ({\n label,\n content,\n}: {\n label: string;\n content: React.ReactNode;\n}) => {\n return (\n <LabelContentPairContainer>\n <span>{label}</span>\n <span>{content}</span>\n </LabelContentPairContainer>\n );\n};\n\nfunction RenderCoBinaryStream({\n value,\n items,\n}: {\n items: BinaryStreamItem[];\n value: RawBinaryCoStream;\n}) {\n const [file, setFile] = useState<\n | {\n blob: Blob;\n mimeType: string;\n unfinishedChunks: boolean;\n totalSize: number | undefined;\n }\n | undefined\n | null\n >(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n // load only the first chunk to get the mime type and size\n getBlobFromCoStream({\n items,\n onlyFirstChunk: true,\n })\n .then((v) => {\n if (v) {\n setFile(v);\n if (v.mimeType.includes(\"image\")) {\n // If it's an image, load the full blob\n getBlobFromCoStream({\n items,\n }).then((s) => {\n if (s) setFile(s);\n });\n }\n }\n })\n .finally(() => setIsLoading(false));\n }, [items]);\n\n if (!isLoading && !file) return <div>No blob</div>;\n\n if (isLoading) return <div>Loading...</div>;\n if (!file) return <div>No blob</div>;\n\n const { blob, mimeType } = file;\n\n const sizeInKB = (file.totalSize || 0) / 1024;\n\n return (\n <>\n <BinaryStreamGrid>\n <LabelContentPair\n label=\"Mime Type\"\n content={<Badge>{mimeType || \"No mime type\"}</Badge>}\n />\n <LabelContentPair\n label=\"Size\"\n content={<span>{sizeInKB.toFixed(2)} KB</span>}\n />\n <LabelContentPair\n label=\"Download\"\n content={\n <BinaryDownloadButton\n fileName={value.id.toString()}\n pdfBlob={blob}\n mimeType={mimeType}\n label={\n mimeType === \"application/pdf\"\n ? \"Download PDF\"\n : \"Download file\"\n }\n />\n }\n />\n </BinaryStreamGrid>\n {mimeType === \"image/png\" || mimeType === \"image/jpeg\" ? (\n <LabelContentPair\n label=\"Preview\"\n content={\n <ImagePreviewContainer>\n <RenderBlobImage blob={blob} />\n </ImagePreviewContainer>\n }\n />\n ) : null}\n </>\n );\n}\n\nfunction RenderCoStream({\n value,\n node,\n}: {\n value: RawCoStream;\n node: LocalNode;\n}) {\n const streamPerUser = Object.keys(value.items);\n const userCoIds = streamPerUser.map((stream) => stream.split(\"_session\")[0]);\n\n return (\n <CoStreamGrid>\n {userCoIds.map((id, idx) => (\n <CoStreamItemContainer key={id}>\n <AccountOrGroupText coId={id as CoID<RawCoValue>} node={node} />\n {/* @ts-expect-error - TODO: fix types */}\n {value.items[streamPerUser[idx]]?.map(\n (item: CoStreamItem<JsonValue>) => (\n <div>\n {new Date(item.madeAt).toLocaleString()}{\" \"}\n {JSON.stringify(item.value)}\n </div>\n ),\n )}\n </CoStreamItemContainer>\n ))}\n </CoStreamGrid>\n );\n}\n\nexport function CoStreamView({\n value,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n value: RawCoStream;\n}) {\n // if (!value) return <div>No value</div>;\n\n const streamType = detectCoStreamType(value);\n\n if (streamType.type === \"binary\") {\n if (streamType.items === undefined) {\n return <div>No binary stream</div>;\n }\n\n return (\n <RenderCoBinaryStream\n value={value as RawBinaryCoStream}\n items={streamType.items}\n />\n );\n }\n\n if (streamType.type === \"coStream\") {\n return <RenderCoStream value={value} node={node} />;\n }\n\n if (streamType.type === \"unknown\") return <div>Unknown stream type</div>;\n\n return <div>Unknown stream type</div>;\n}\n\nfunction RenderBlobImage({ blob }: { blob: Blob }) {\n const urlCreator = window.URL || window.webkitURL;\n return <img src={urlCreator.createObjectURL(blob)} />;\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport {\n CoJsonType,\n ExtendedCoJsonType,\n useResolvedCoValue,\n} from \"./use-resolve-covalue.js\";\n\nconst IconText = styled(\"span\")`\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n`;\n\nconst UnavailableText = styled(\"div\")`\n font-weight: 500;\n`;\n\nconst EmptySpace = styled(\"div\")`\n white-space: pre;\n width: 3.5rem;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n`;\n\nexport const TypeIcon = ({\n type,\n extendedType,\n}: {\n type: CoJsonType;\n extendedType?: ExtendedCoJsonType;\n}) => {\n const iconMap: Record<ExtendedCoJsonType | CoJsonType, string> = {\n record: \"{} Record\",\n image: \"🖼️ Image\",\n comap: \"{} CoMap\",\n costream: \"≋ CoFeed\",\n colist: \"☰ CoList\",\n account: \"👤 Account\",\n group: \"👥 Group\",\n file: \"📃 FileStream\",\n coplaintext: \"📄 CoPlainText\",\n };\n\n const iconKey = extendedType || type;\n const icon = iconMap[iconKey as keyof typeof iconMap];\n\n return icon ? <IconText>{icon}</IconText> : null;\n};\n\nexport const ResolveIcon = ({\n coId,\n node,\n}: {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n}) => {\n const { type, extendedType, snapshot } = useResolvedCoValue(coId, node);\n\n if (snapshot === \"unavailable\" && !type) {\n return <UnavailableText>Unavailable</UnavailableText>;\n }\n\n if (!type) return <EmptySpace> </EmptySpace>;\n\n return <TypeIcon type={type} extendedType={extendedType} />;\n};\n","import { CoID, RawCoValue } from \"cojson\";\n\nexport type PageInfo = {\n coId: CoID<RawCoValue>;\n name?: string;\n};\n\nexport const isCoId = (coId: unknown): coId is CoID<RawCoValue> =>\n typeof coId === \"string\" &&\n coId.startsWith(\"co_\") &&\n !coId.includes(\"inviteSecret\");\n","import { CoID, JsonValue, LocalNode, RawCoValue } from \"cojson\";\nimport { styled } from \"goober\";\nimport React, { useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { Icon } from \"../ui/icon.js\";\nimport { Text } from \"../ui/text.js\";\nimport { isCoId } from \"./types.js\";\nimport { isBrowserImage, useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\nconst LinkContainer = styled(\"span\")`\n display: inline-flex;\n gap: 0.25rem;\n align-items: center;\n`;\n\nconst BooleanText = styled(\"span\")<{ value: boolean }>`\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n ${(props) =>\n props.value\n ? `\n color: var(--j-success-color);\n `\n : `\n color: var(--j-destructive-color);\n `}\n`;\n\nconst ObjectContent = styled(\"pre\")`\n margin-top: 0.375rem;\n font-size: 0.875rem;\n white-space: pre-wrap;\n`;\n\nconst PreviewContainer = styled(\"div\")`\n font-size: 0.875rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n align-items: flex-start;\n`;\n\nconst PreviewGrid = styled(\"div\")`\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0.5rem;\n`;\n\nconst PreviewMoreText = styled(Text)`\n text-align: left;\n margin-top: 0.5rem;\n`;\n\nconst ImagePreviewContainer = styled(\"div\")`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n`;\n\nconst PreviewImage = styled(\"img\")`\n width: 2rem;\n height: 2rem;\n border: 2px solid white;\n box-shadow: var(--j-shadow-sm);\n margin: 0.5rem 0;\n`;\n\nconst RecordText = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.25rem;\n`;\n\nconst ListText = styled(\"div\")`\n display: flex;\n align-items: center;\n gap: 0.25rem;\n`;\n\n// Is there a chance we can pass the actual CoValue here?\nexport function ValueRenderer({\n json,\n onCoIDClick,\n compact,\n}: {\n json: JsonValue | undefined;\n onCoIDClick?: (childNode: CoID<RawCoValue>) => void;\n compact?: boolean;\n}) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (typeof json === \"undefined\" || json === undefined) {\n return <Text muted>undefined</Text>;\n }\n\n if (json === null) {\n return <Text muted>null</Text>;\n }\n\n if (typeof json === \"string\" && isCoId(json)) {\n const content = (\n <>\n {json}\n {onCoIDClick && <Icon name=\"link\" />}\n </>\n );\n\n if (onCoIDClick) {\n return (\n <Button\n variant=\"link\"\n onClick={() => {\n onCoIDClick?.(json as CoID<RawCoValue>);\n }}\n >\n {content}\n </Button>\n );\n }\n\n return <LinkContainer>{content}</LinkContainer>;\n }\n\n if (typeof json === \"string\") {\n return <Text>{json}</Text>;\n }\n\n if (typeof json === \"number\") {\n return <Text mono>{json}</Text>;\n }\n\n if (typeof json === \"boolean\") {\n return <BooleanText value={json}>{json.toString()}</BooleanText>;\n }\n const longJson = JSON.stringify(json, null, 2);\n const shortJson = longJson\n .split(\"\\n\")\n .slice(0, compact ? 3 : 8)\n .join(\"\\n\");\n\n // Check if collapsed differs from full\n const hasDifference = longJson !== shortJson;\n\n if (typeof json === \"object\") {\n return (\n <>\n <p>{Array.isArray(json) ? <>Array ({json.length})</> : <>Object</>}</p>\n <ObjectContent>\n {isExpanded ? longJson : shortJson}\n\n {hasDifference && !isExpanded ? \"\\n ...\" : null}\n </ObjectContent>\n\n {!compact && hasDifference ? (\n <Button variant=\"link\" onClick={() => setIsExpanded(!isExpanded)}>\n {isExpanded ? \"Show less\" : \"Show more\"}\n </Button>\n ) : null}\n </>\n );\n }\n\n return <span>{String(json)}</span>;\n}\n\nexport const CoMapPreview = ({\n coId,\n node,\n limit = 6,\n}: {\n coId: CoID<RawCoValue>;\n node: LocalNode;\n limit?: number;\n}) => {\n const { value, snapshot, type, extendedType } = useResolvedCoValue(\n coId,\n node,\n );\n\n if (!snapshot) {\n return (\n <div\n style={{\n borderRadius: \"0.25rem\",\n backgroundColor: \"var(--j-foreground)\",\n animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n whiteSpace: \"pre\",\n width: \"6rem\",\n }}\n >\n {\" \"}\n </div>\n );\n }\n\n if (snapshot === \"unavailable\" && !value) {\n return (\n <Text inline muted>\n Unavailable\n </Text>\n );\n }\n\n if (type === \"coplaintext\") {\n return <>{value.toString()}</>;\n }\n\n if (extendedType === \"image\" && isBrowserImage(snapshot)) {\n return (\n <ImagePreviewContainer>\n <PreviewImage src={snapshot.placeholderDataURL} />\n <Text inline small muted>\n {snapshot.originalSize[0]} x {snapshot.originalSize[1]}\n </Text>\n </ImagePreviewContainer>\n );\n }\n\n if (extendedType === \"record\") {\n return (\n <RecordText>\n Record{\" \"}\n <Text inline muted>\n ({Object.keys(snapshot).length})\n </Text>\n </RecordText>\n );\n }\n\n if (type === \"colist\") {\n return (\n <ListText>\n List{\" \"}\n <Text inline muted>\n ({(snapshot as unknown as []).length})\n </Text>\n </ListText>\n );\n }\n\n const properties = Object.entries(snapshot);\n const limitedProperties =\n extendedType === \"account\"\n ? properties\n .filter(\n ([key]) =>\n !key.startsWith(\"key_z\") &&\n !key.startsWith(\"sealer_z\") &&\n key !== \"readKey\",\n )\n .slice(0, limit)\n : properties.slice(0, limit);\n\n return (\n <PreviewContainer>\n <PreviewGrid>\n {limitedProperties.map(([key, value]) => (\n <React.Fragment key={key}>\n <Text strong>{key}: </Text>\n <ValueRenderer compact json={value} />\n </React.Fragment>\n ))}\n </PreviewGrid>\n {properties.length > limit && (\n <PreviewMoreText muted small>\n {properties.length - limit} more\n </PreviewMoreText>\n )}\n </PreviewContainer>\n );\n};\n","export function ChevronDownIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n","export function DeleteIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-trash-icon lucide-trash\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n","export function LinkIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n {...props}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244\"\n />\n </svg>\n );\n}\n","import { ChevronDownIcon } from \"./icons/chevron-down-icon.js\";\nimport { DeleteIcon } from \"./icons/delete-icon.js\";\nimport { LinkIcon } from \"./icons/link-icon.js\";\n\nconst icons = {\n chevronDown: ChevronDownIcon,\n delete: DeleteIcon,\n link: LinkIcon,\n};\n\n// copied from tailwind line height https://tailwindcss.com/docs/font-size\nconst sizes = {\n \"2xs\": 14,\n xs: 16,\n sm: 20,\n md: 24,\n lg: 28,\n xl: 28,\n \"2xl\": 32,\n \"3xl\": 36,\n \"4xl\": 40,\n \"5xl\": 48,\n \"6xl\": 60,\n \"7xl\": 72,\n \"8xl\": 96,\n \"9xl\": 128,\n};\n\nconst strokeWidths = {\n \"2xs\": 2.5,\n xs: 2,\n sm: 2,\n md: 1.5,\n lg: 1.5,\n xl: 1.5,\n \"2xl\": 1.25,\n \"3xl\": 1.25,\n \"4xl\": 1.25,\n \"5xl\": 1,\n \"6xl\": 1,\n \"7xl\": 1,\n \"8xl\": 1,\n \"9xl\": 1,\n};\n\nexport function Icon({\n name,\n size = \"md\",\n className,\n ...svgProps\n}: {\n name?: keyof typeof icons;\n size?: keyof typeof sizes;\n} & React.SVGProps<SVGSVGElement>) {\n if (!name || !icons.hasOwnProperty(name)) {\n throw new Error(`Icon not found: ${name}`);\n }\n\n // @ts-ignore\n const IconComponent = icons?.hasOwnProperty(name) ? icons[name] : icon;\n\n return (\n <IconComponent\n aria-hidden=\"true\"\n size={sizes[size]}\n strokeWidth={strokeWidths[size]}\n strokeLinecap=\"round\"\n {...svgProps}\n />\n );\n}\n","import { styled } from \"goober\";\nexport const Card = styled(\"div\")`\n background-color: var(--j-background);\n border-radius: var(--j-radius-lg);\n box-shadow: var(--j-shadow-sm);\n border: 1px solid var(--j-border-color);\n padding: 1rem;\n text-align: left;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n`;\n\nexport const CardHeader = styled(\"div\")`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const CardBody = styled(\"div\")`\n flex: 1;\n`;\n","import { styled } from \"goober\";\n\nconst GridThreeColumns = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(1, minmax(0, 1fr));\n gap: 1rem;\n \n @media (min-width: 768px) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n \n @media (min-width: 1280px) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n`;\n\nconst GridTwoColumns = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(1, minmax(0, 1fr));\n gap: 1rem;\n \n @media (min-width: 768px) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n`;\n\nconst GridOneColumn = styled(\"div\")`\n display: grid;\n grid-template-columns: repeat(1, minmax(0, 1fr));\n gap: 1rem;\n`;\n\nexport function Grid(\n props: React.HTMLAttributes<HTMLElement> & { cols: 1 | 2 | 3 },\n) {\n const { cols, children, ...rest } = props;\n\n switch (cols) {\n case 1:\n return <GridOneColumn {...rest}>{children}</GridOneColumn>;\n case 2:\n return <GridTwoColumns {...rest}>{children}</GridTwoColumns>;\n case 3:\n return <GridThreeColumns {...rest}>{children}</GridThreeColumns>;\n default:\n throw new Error(`Invalid number of columns: ${cols}`);\n }\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport { JsonObject, JsonValue } from \"cojson\";\nimport { ResolveIcon } from \"./type-icon.js\";\nimport { PageInfo, isCoId } from \"./types.js\";\nimport { CoMapPreview, ValueRenderer } from \"./value-renderer.js\";\n\nimport { Badge } from \"../ui/badge.js\";\nimport { Card, CardBody, CardHeader } from \"../ui/card.js\";\nimport { Grid } from \"../ui/grid.js\";\nimport { Text } from \"../ui/text.js\";\n\nfunction GridItem({\n entry,\n onNavigate,\n node,\n}: {\n entry: [string, JsonValue | undefined];\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n const [key, value] = entry;\n const isCoValue = isCoId(value);\n\n const props = isCoValue\n ? {\n onClick: () =>\n onNavigate([{ coId: value as CoID<RawCoValue>, name: key }]),\n as: \"button\",\n }\n : {\n style: {\n backgroundColor: \"var(--j-foreground)\",\n borderColor: \"var(--j-foreground)\",\n },\n };\n\n return (\n <Card {...props}>\n <CardHeader>\n {isCoValue ? (\n <>\n <Text strong>{key}</Text>\n <Badge>\n <ResolveIcon coId={value as CoID<RawCoValue>} node={node} />\n </Badge>\n </>\n ) : (\n <Text strong>{key}</Text>\n )}\n </CardHeader>\n <CardBody style={{ wordBreak: \"break-word\" }}>\n {isCoValue ? (\n <CoMapPreview coId={value as CoID<RawCoValue>} node={node} />\n ) : (\n <ValueRenderer\n json={value}\n onCoIDClick={(coId) => {\n onNavigate([{ coId, name: key }]);\n }}\n />\n )}\n </CardBody>\n </Card>\n );\n}\n\nexport function GridView({\n data,\n onNavigate,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n const entries = Object.entries(data);\n\n return (\n <Grid cols={entries.length === 1 ? 1 : 3}>\n {entries.map((entry, childIndex) => (\n <GridItem\n entry={entry}\n onNavigate={onNavigate}\n node={node}\n key={childIndex}\n />\n ))}\n </Grid>\n );\n}\n","import { JsonObject } from \"cojson\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { Card, CardBody, CardHeader } from \"../ui/card.js\";\nimport { Text } from \"../ui/text.js\";\nimport { ValueRenderer } from \"./value-renderer.js\";\n\nfunction CopyButton({ data }: { data: JsonObject }) {\n const [copyCount, setCopyCount] = useState(0);\n const copied = copyCount > 0;\n const stringifiedData = JSON.stringify(data);\n\n useEffect(() => {\n if (copyCount > 0) {\n const timeout = setTimeout(() => setCopyCount(0), 1000);\n return () => {\n clearTimeout(timeout);\n };\n }\n }, [copyCount]);\n\n return (\n <Button\n style={{\n position: \"absolute\",\n top: \"10px\",\n right: \"10px\",\n }}\n onClick={() => {\n window.navigator.clipboard.writeText(stringifiedData).then(() => {\n setCopyCount((count) => count + 1);\n });\n }}\n variant=\"secondary\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </Button>\n );\n}\n\nexport function RawDataCard({ data }: { data: JsonObject }) {\n return (\n <Card style={{ position: \"relative\" }}>\n <CardHeader>\n <Text strong>Raw data</Text>\n <CopyButton data={data} />\n </CardHeader>\n <CardBody>\n <ValueRenderer json={data} />\n </CardBody>\n </Card>\n );\n}\n","import { JsonObject, LocalNode } from \"cojson\";\nimport { GridView } from \"./grid-view.js\";\nimport { RawDataCard } from \"./raw-data-card.js\";\nimport { PageInfo } from \"./types.js\";\n\nexport function AccountView({\n data,\n onNavigate,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n const readableData = { ...data };\n\n for (const key in readableData) {\n if (\n key === \"readKey\" ||\n key.startsWith(\"sealer_z\") ||\n key.startsWith(\"key_z\")\n ) {\n delete readableData[key];\n }\n }\n\n return (\n <>\n <GridView data={readableData} onNavigate={onNavigate} node={node} />\n\n <RawDataCard data={data} />\n </>\n );\n}\n","import { JsonObject } from \"cojson\";\nimport { RawDataCard } from \"./raw-data-card.js\";\n\nexport function CoPlainTextView({\n data,\n}: {\n data: JsonObject;\n}) {\n if (!data) return;\n\n return (\n <>\n <p>{Object.values(data).join(\"\")}</p>\n <RawDataCard data={data} />\n </>\n );\n}\n","import { styled } from \"goober\";\nimport React from \"react\";\n\nconst StyledTable = styled(\"table\")`\n width: 100%;\n`;\n\nconst StyledThead = styled(\"thead\")`\n text-align: left;\n border-bottom: 1px solid var(--j-border-color);\n background-color: var(--j-neutral-100);\n\n @media (prefers-color-scheme: dark) {\n background-color: var(--j-neutral-925);\n }\n`;\n\nconst StyledTbody = styled(\"tbody\")`\n tr {\n border-bottom: 1px solid var(--j-border-color);\n\n &:last-child {\n border-bottom: none;\n }\n }\n`;\n\nconst StyledTh = styled(\"th\")`\n font-weight: 500;\n padding: 0.5rem 0.75rem;\n color: var(--j-text-color-strong);\n`;\n\nconst StyledTd = styled(\"td\")`\n padding: 0.5rem 0.75rem;\n`;\n\nexport const Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ children, ...props }, ref) => (\n <StyledTable ref={ref} {...props}>\n {children}\n </StyledTable>\n));\n\nexport const TableHead = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ children, ...props }, ref) => (\n <StyledThead ref={ref} {...props}>\n {children}\n </StyledThead>\n));\n\nexport const TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ children, ...props }, ref) => (\n <StyledTbody ref={ref} {...props}>\n {children}\n </StyledTbody>\n));\n\nexport const TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ children, ...props }, ref) => (\n <tr ref={ref} {...props}>\n {children}\n </tr>\n));\n\nexport const TableHeader = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ children, ...props }, ref) => (\n <StyledTh ref={ref} {...props}>\n {children}\n </StyledTh>\n));\n\nexport const TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ children, ...props }, ref) => (\n <StyledTd ref={ref} {...props}>\n {children}\n </StyledTd>\n));\n","import { JsonObject, LocalNode, RawAccount } from \"cojson\";\nimport { CoID } from \"cojson\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table.js\";\nimport { Text } from \"../ui/text.js\";\nimport { AccountOrGroupText } from \"./account-or-group-text.js\";\nimport { RawDataCard } from \"./raw-data-card.js\";\nimport { PageInfo, isCoId } from \"./types.js\";\n\nexport function GroupView({\n data,\n onNavigate,\n node,\n}: {\n data: JsonObject;\n onNavigate: (pages: PageInfo[]) => void;\n node: LocalNode;\n}) {\n return (\n <>\n <Text strong>Members</Text>\n\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Account</TableHeader>\n <TableHeader>Permission</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {\"everyone\" in data && typeof data.everyone === \"string\" ? (\n <TableRow>\n <TableCell>everyone</TableCell>\n <TableCell>{data.everyone}</TableCell>\n </TableRow>\n ) : null}\n\n {Object.entries(data).map(([key, value]) =>\n isCoId(key) ? (\n <TableRow key={key}>\n <TableCell>\n <AccountOrGroupText\n coId={key as CoID<RawAccount>}\n node={node}\n showId\n onClick={() => {\n onNavigate([{ coId: key, name: key }]);\n }}\n />\n </TableCell>\n <TableCell>{value as string}</TableCell>\n </TableRow>\n ) : null,\n )}\n </TableBody>\n </Table>\n\n <RawDataCard data={data} />\n </>\n );\n}\n","import { LocalNode, RawCoValue } from \"cojson\";\nimport { Text } from \"../ui/text.js\";\nimport { useResolvedCoValue } from \"./use-resolve-covalue.js\";\n\nexport function RoleDisplay({\n node,\n value,\n}: { node: LocalNode; value: RawCoValue }) {\n const { snapshot } = useResolvedCoValue(value.group.id, node);\n\n if (!snapshot || snapshot === \"unavailable\") {\n return null;\n }\n\n let role;\n\n if (value.group.id == node.getCurrentAgent().id) {\n role = \"owner\";\n } else if (snapshot[node.getCurrentAgent().id]) {\n role = snapshot[node.getCurrentAgent().id] as string;\n } else if (snapshot.everyone) {\n role = snapshot.everyone as string;\n } else {\n role = \"unauthorized\";\n }\n\n return <Text>Role: {role}</Text>;\n}\n","import { CoID, LocalNode, RawCoValue } from \"cojson\";\nimport type { JsonObject } from \"cojson\";\nimport { styled } from \"goober\";\nimport { useMemo, useState } from \"react\";\nimport { Button } from \"../ui/button.js\";\nimport { PageInfo, isCoId } from \"./types.js\";\nimport { useResolvedCoValues } from \"./use-resolve-covalue.js\";\nimport { ValueRenderer } from \"./value-renderer.js\";\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table.js\";\nimport { Text } from \"../ui/text.js\";\n\nconst PaginationContainer = styled(\"div\")`\n padding: 1rem 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.5rem;\n`;\n\nfunction CoValuesTableView({\n data,\n node,\n onNavigate,\n}: {\n data: JsonObject;\n node: LocalNode;\n onNavigate: (pages: PageInfo[]) => void;\n}) {\n const [visibleRowsCount, setVisibleRowsCount] = useState(10);\n const [coIdArray, visibleRows] = useMemo(() => {\n const coIdArray = Array.isArray(data)\n ? data\n : Object.values(data).every((k) => typeof k === \"string\" && isCoId(k))\n ? Object.values(data).map((k) => k as CoID<RawCoValue>)\n : [];\n\n const visibleRows = coIdArray.slice(0, visibleRowsCount);\n\n return [coIdArray, visibleRows];\n }, [data, visibleRowsCount]);\n const resolvedRows = useResolvedCoValues(visibleRows, node);\n\n const hasMore = visibleRowsCount < coIdArray.length;\n\n if (!coIdArray.length) {\n return <div>No data to display</div>;\n }\n\n if (resolvedRows.length === 0) {\n return <div>Loading...</div>;\n }\n\n const keys = Array.from(\n new Set(resolvedRows.flatMap((item) => Object.keys(item.snapshot || {}))),\n );\n\n const loadMore = () => {\n setVisibleRowsCount((prevVisibleRows) => prevVisibleRows + 10);\n };\n\n return (\n <>\n <Table>\n <TableHead>\n <TableRow>\n {[...keys, \"Action\"].map((key) => (\n <TableHeader key={key}>{key}</TableHeader>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {resolvedRows.slice(0, visibleRowsCount).map((item, index) => (\n <TableRow key={index}>\n {keys.map((key) => (\n <TableCell key={key}>\n <ValueRenderer\n json={(item.snapshot as JsonObject)[key]}\n onCoIDClick={(coId) => {\n async function handleClick() {\n onNavigate([\n {\n coId: item.value!.id,\n name: index.toString(),\n },\n {\n coId: coId,\n name: key,\n },\n ]);\n }\n\n handleClick();\n }}\n />\n </TableCell>\n ))}\n\n <TableCell>\n <Button\n variant=\"secondary\"\n onClick={() =>\n onNavigate([\n {\n coId: item.value!.id,\n name: index.toString(),\n },\n ])\n }\n >\n View\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n <PaginationContainer>\n <Text muted small>\n Showing {Math.min(visibleRowsCount, coIdArray.length)} of{\" \"}\n {coIdArray.length}\n </Text>\n {hasMore && (\n <Button variant=\"secondary\" onClick={loadMore}>\n Load more\n </Button>\n )}\n </PaginationContainer>\n </>\n );\n}\n\nexport function TableView({\n data,\n node,\n onNavigate,\n}: {\n data: JsonObject;\n node: LocalNode;\n onNavigate: (pages: PageInfo[]) => void;\n}) {\n const isListOfCoValues = useMemo(() => {\n return Array.isArray(data) && data.every((k) => isCoId(k));\n }, [data]);\n\n // if data is a list of covalue ids, we need to resolve those covalues\n if (isListOfCoValues) {\n return (\n <CoValuesTableView data={data} node={node} onNavigate={onNavigate} />\n );\n }\n\n // if data is a list of primitives, we can render those values directly\n return (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader style={{ width: \"5rem\" }}>Index</TableHeader>\n <TableHeader>Value</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {Array.isArray(data) &&\n data?.map((value, index) => (\n <TableRow key={index}>\n <TableCell>\n <Text mono>{index}</Text>\n </TableCell>\n <TableCell>\n <ValueRenderer json={value} />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n","import { CoID, RawCoValue } from \"cojson\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { PageInfo } from \"./types.js\";\n\nconst STORAGE_KEY = \"jazz-inspector-paths\";\n\nexport function usePagePath(defaultPath?: PageInfo[]) {\n const [path, setPath] = useState<PageInfo[]>(() => {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n console.warn(\"Failed to parse stored path:\", e);\n }\n }\n return defaultPath || [];\n });\n\n const updatePath = useCallback((newPath: PageInfo[]) => {\n setPath(newPath);\n localStorage.setItem(STORAGE_KEY, JSON.stringify(newPath));\n }, []);\n\n useEffect(() => {\n if (defaultPath && JSON.stringify(path) !== JSON.stringify(defaultPath)) {\n updatePath(defaultPath);\n }\n }, [defaultPath, path, updatePath]);\n\n const addPages = useCallback(\n (newPages: PageInfo[]) => {\n updatePath([...path, ...newPages]);\n },\n [path, updatePath],\n );\n\n const goToIndex = useCallback(\n (index: number) => {\n updatePath(path.slice(0, index + 1));\n },\n [path, updatePath],\n );\n\n const setPage = useCallback(\n (coId: CoID<RawCoValue>) => {\n updatePath([{ coId, name: \"Root\" }]);\n },\n [updatePath],\n );\n\n const goBack = useCallback(() => {\n if (path.length > 1) {\n updatePath(path.slice(0, path.length - 1));\n }\n }, [path, updatePath]);\n\n return {\n path,\n setPage,\n addPages,\n goToIndex,\n goBack,\n };\n}\n","import { styled } from \"goober\";\n\nexport const GlobalStyles = styled(\"div\")`\n /* Colors */\n --j-primary-color: #146AFF;\n --j-link-color: var(--j-primary-color);\n --j-success-color: oklch(52.7% 0.154 150.069);\n --j-destructive-color: oklch(50.5% 0.213 27.518);\n \n /* Neutral Colors */\n --j-neutral-100: #faf8f8;\n --j-neutral-200: #e5e3e4;\n --j-neutral-300: #d0cecf;\n --j-neutral-400: #bbbaba;\n --j-neutral-500: #a8a6a6;\n --j-neutral-600: #858484;\n --j-neutral-700: #6b696a;\n --j-neutral-900: #2f2e2e;\n --j-neutral-925: #1b1a1a;\n --j-neutral-950: #151414;\n \n /* Text Colors */\n --j-text-color: var(--j-neutral-700);\n --j-text-color-strong: var(--j-neutral-900);\n\n /* Border Colors */\n --j-border-color: var(--j-neutral-200);\n --j-border-color-hover: var(--j-neutral-300);\n --j-border-dark: var(--j-neutral-900);\n --j-border-focus: var(--j-primary-color);\n\n /* Background Colors */\n --j-background: #FFFFFF;\n --j-foreground: var(--j-neutral-100);\n\n /* Border Radius */\n --j-radius-sm: 0.25rem;\n --j-radius-md: 0.375rem;\n --j-radius-lg: 0.5rem;\n\n /* Shadows */\n --j-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n\n @media (prefers-color-scheme: dark) {\n --j-text-color: var(--j-neutral-400);\n --j-border-color: var(--j-neutral-900);\n --j-background: var(--j-neutral-950);\n --j-foreground: var(--j-neutral-925);\n --j-border-color-hover: var(--j-neutral-700);\n --j-text-color-strong: var(--j-neutral-100);\n --j-success-color: oklch(72.3% 0.219 149.579);\n --j-destructive-color: oklch(63.7% 0.237 25.331);\n }\n \n *:focus {\n outline: none;\n }\n \n *:focus-visible {\n box-shadow: 0 0 0 2px var(--j-link-color);\n }\n \n .j-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n`;\n","import { styled } from \"goober\";\nimport React from \"react\";\n\nexport type Position =\n | \"bottom right\"\n | \"bottom left\"\n | \"top right\"\n | \"top left\"\n | \"right\"\n | \"left\";\n\nconst StyledInspectorButton = styled(\"button\")<{ position: Position }>`\n position: fixed;\n width: 2.5rem;\n height: 2.5rem;\n background-color: white;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n margin: 1rem;\n padding: 0.5rem !important;\n border: 1px solid #e5e3e4;\n border-radius: 0.375rem;\n z-index: 999;\n \n ${(props) => {\n switch (props.position) {\n case \"bottom right\":\n return \"bottom: 0; right: 0;\";\n case \"bottom left\":\n return \"bottom: 0; left: 0;\";\n case \"top right\":\n return \"top: 0; right: 0;\";\n case \"top left\":\n return \"top: 0; left: 0;\";\n case \"right\":\n return \"right: 0; top: 50%; transform: translateY(-50%);\";\n case \"left\":\n return \"left: 0; top: 50%; transform: translateY(-50%);\";\n default:\n return \"\";\n }\n }}\n`;\n\nconst JazzIcon = styled(\"svg\")`\n width: 100%;\n height: auto;\n position: relative;\n left: -1px;\n color: #146AFF;\n`;\n\nexport function InspectorButton({\n position = \"right\",\n ...buttonProps\n}: React.ComponentPropsWithoutRef<\"button\"> & { position?: Position }) {\n return (\n <StyledInspectorButton position={position} {...buttonProps}>\n <JazzIcon\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"119\"\n height=\"115\"\n viewBox=\"0 0 119 115\"\n fill=\"none\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M118.179 23.8277V0.167999C99.931 7.5527 79.9854 11.6192 59.0897 11.6192C47.1466 11.6192 35.5138 10.2908 24.331 7.7737V30.4076V60.1508C23.2955 59.4385 22.1568 58.8458 20.9405 58.3915C18.1732 57.358 15.128 57.0876 12.1902 57.6145C9.2524 58.1414 6.5539 59.4419 4.4358 61.3516C2.3178 63.2613 0.875401 65.6944 0.291001 68.3433C-0.293399 70.9921 0.00659978 73.7377 1.1528 76.2329C2.2991 78.728 4.2403 80.861 6.7308 82.361C9.2214 83.862 12.1495 84.662 15.1448 84.662C15.6054 84.662 15.8365 84.662 16.0314 84.659C26.5583 84.449 35.042 75.9656 35.2513 65.4386C35.2534 65.3306 35.2544 65.2116 35.2548 65.0486L35.2552 64.7149V64.5521V61.0762V32.1993C43.0533 33.2324 51.0092 33.7656 59.0897 33.7656C59.6696 33.7656 60.2489 33.7629 60.8276 33.7574V89.696C59.792 88.983 58.6533 88.391 57.437 87.936C54.6697 86.903 51.6246 86.632 48.6867 87.159C45.7489 87.686 43.0504 88.987 40.9323 90.896C38.8143 92.806 37.3719 95.239 36.7875 97.888C36.2032 100.537 36.5031 103.283 37.6494 105.778C38.7956 108.273 40.7368 110.405 43.2273 111.906C45.7179 113.406 48.646 114.207 51.6414 114.207C52.1024 114.207 52.3329 114.207 52.5279 114.203C63.0548 113.994 71.5385 105.51 71.7478 94.983C71.7517 94.788 71.7517 94.558 71.7517 94.097V90.621V33.3266C83.962 32.4768 95.837 30.4075 107.255 27.2397V59.9017C106.219 59.1894 105.081 58.5966 103.864 58.1424C101.097 57.1089 98.052 56.8384 95.114 57.3653C92.176 57.8922 89.478 59.1927 87.36 61.1025C85.242 63.0122 83.799 65.4453 83.215 68.0941C82.631 70.743 82.931 73.4886 84.077 75.9837C85.223 78.4789 87.164 80.612 89.655 82.112C92.145 83.612 95.073 84.413 98.069 84.413C98.53 84.413 98.76 84.413 98.955 84.409C109.482 84.2 117.966 75.7164 118.175 65.1895C118.179 64.9945 118.179 64.764 118.179 64.3029V60.8271V23.8277Z\"\n fill=\"currentColor\"\n />\n </JazzIcon>\n <span\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: \"0\",\n }}\n >\n Open Jazz Inspector\n </span>\n </StyledInspectorButton>\n );\n}\n","import { useEffect, useState } from \"react\";\n\nconst STORAGE_KEY = \"jazz-inspector-open\";\n\nexport function useOpenInspector() {\n const [open, setOpen] = useState(() => {\n // Initialize from localStorage if available\n const stored = localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : false;\n });\n\n // Update localStorage when open state changes\n useEffect(() => {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(open));\n }, [open]);\n\n return [open, setOpen];\n}\n","import { styled } from \"goober\";\nimport { useId } from \"react\";\nimport { Icon } from \"./icon.js\";\n\nconst SelectContainer = styled(\"div\")<{ className?: string }>`\n display: grid;\n gap: 0.25rem;\n`;\n\nconst SelectWrapper = styled(\"div\")`\n position: relative;\n display: flex;\n align-items: center;\n`;\n\nconst StyledSelect = styled(\"select\")`\n width: 100%;\n border-radius: var(--j-radius-md);\n border: 1px solid var(--j-border-color);\n padding: 0.5rem 0.875rem 0.5rem 0.875rem;\n padding-right: 2rem;\n box-shadow: var(--j-shadow-sm);\n font-weight: 500;\n color: var(--j-text-color-strong);\n appearance: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n @media (prefers-color-scheme: dark) {\n background-color: var(--j-foreground);\n }\n`;\n\nconst SelectIcon = styled(\"span\")`\n position: absolute;\n right: 0.5em;\n color: var(--j-neutral-400);\n pointer-events: none;\n\n @media (prefers-color-scheme: dark) {\n color: var(--j-neutral-900);\n }\n`;\n\nexport function Select(\n props: React.SelectHTMLAttributes<HTMLSelectElement> & {\n label: string;\n hideLabel?: boolean;\n },\n) {\n const { label, hideLabel, id: customId, className, ...selectProps } = props;\n const generatedId = useId();\n const id = customId || generatedId;\n\n return (\n <SelectContainer className={className}>\n <label htmlFor={id} className={hideLabel ? \"j-sr-only\" : \"\"}>\n {label}\n </label>\n\n <SelectWrapper>\n <StyledSelect {...selectProps} id={id}>\n {props.children}\n </StyledSelect>\n\n <SelectIcon>\n <Icon name=\"chevronDown\" size=\"sm\" />\n </SelectIcon>\n </SelectWrapper>\n </SelectContainer>\n );\n}\n"],"mappings":"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","names":["React","styled","useState","styled","forwardRef","jsx","styled","jsx","jsxs","styled","styled","styled","React","styled","jsx","styled","jsx","styled","React","jsx","useEffect","useState","useEffect","useState","styled","jsx","jsxs","styled","useState","useEffect","Fragment","jsx","useState","useEffect","styled","jsx","styled","icon","styled","React","useState","jsx","jsx","jsxs","jsx","jsx","Fragment","jsx","jsxs","styled","ImagePreviewContainer","useState","value","React","styled","styled","jsx","Fragment","jsx","jsxs","useEffect","useState","jsx","jsxs","useState","useEffect","Fragment","jsx","jsxs","Fragment","jsx","jsxs","styled","React","jsx","Fragment","jsx","jsxs","jsxs","styled","useState","Fragment","jsx","jsxs","styled","useState","coIdArray","visibleRows","Fragment","jsx","jsxs","React","styled","Fragment","jsx","jsxs","styled","useEffect","useState","styled","styled","jsx","jsxs","useEffect","useState","STORAGE_KEY","Fragment","jsx","jsxs","styled","HeaderContainer","useState","styled","useId","jsx","jsxs","styled","useId","React"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"co-plain-text-view.d.ts","sourceRoot":"","sources":["../../../src/inspector/viewer/co-plain-text-view.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,wBAAgB,eAAe,CAAC,EAC9B,IAAI,GACL,EAAE;IACD,IAAI,EAAE,UAAU,CAAC;CAClB,uDASA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/inspector/viewer/page.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAe,UAAU,EAAE,MAAM,QAAQ,CAAC;AAElE,OAAO,KAAK,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/inspector/viewer/page.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAe,UAAU,EAAE,MAAM,QAAQ,CAAC;AAElE,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA8DtC,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAyCF,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CA4EpC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"type-icon.d.ts","sourceRoot":"","sources":["../../../src/inspector/viewer/type-icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAErD,OAAO,EACL,UAAU,EACV,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAgBlC,eAAO,MAAM,QAAQ,4BAGlB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC,
|
1
|
+
{"version":3,"file":"type-icon.d.ts","sourceRoot":"","sources":["../../../src/inspector/viewer/type-icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAErD,OAAO,EACL,UAAU,EACV,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAgBlC,eAAO,MAAM,QAAQ,4BAGlB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC,mDAiBA,CAAC;AAEF,eAAO,MAAM,WAAW,oBAGrB;IACD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB,4CAUA,CAAC"}
|