jazz-tools 0.15.0 → 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.
Files changed (56) hide show
  1. package/.turbo/turbo-build.log +47 -47
  2. package/CHANGELOG.md +23 -0
  3. package/dist/{chunk-FSIM7N33.js → chunk-VBDJM6Z5.js} +142 -31
  4. package/dist/chunk-VBDJM6Z5.js.map +1 -0
  5. package/dist/index.js +1 -1
  6. package/dist/inspector/index.js +147 -102
  7. package/dist/inspector/index.js.map +1 -1
  8. package/dist/inspector/viewer/co-plain-text-view.d.ts +5 -0
  9. package/dist/inspector/viewer/co-plain-text-view.d.ts.map +1 -0
  10. package/dist/inspector/viewer/new-app.d.ts.map +1 -1
  11. package/dist/inspector/viewer/page.d.ts.map +1 -1
  12. package/dist/inspector/viewer/type-icon.d.ts.map +1 -1
  13. package/dist/inspector/viewer/use-open-inspector.d.ts +2 -0
  14. package/dist/inspector/viewer/use-open-inspector.d.ts.map +1 -0
  15. package/dist/inspector/viewer/use-page-path.d.ts.map +1 -1
  16. package/dist/inspector/viewer/use-resolve-covalue.d.ts +1 -1
  17. package/dist/inspector/viewer/use-resolve-covalue.d.ts.map +1 -1
  18. package/dist/inspector/viewer/value-renderer.d.ts.map +1 -1
  19. package/dist/react-native-core/index.js +2 -18
  20. package/dist/react-native-core/index.js.map +1 -1
  21. package/dist/react-native-core/media.d.ts.map +1 -1
  22. package/dist/testing.js +1 -1
  23. package/dist/tools/coValues/coFeed.d.ts +9 -0
  24. package/dist/tools/coValues/coFeed.d.ts.map +1 -1
  25. package/dist/tools/coValues/coMap.d.ts +98 -2
  26. package/dist/tools/coValues/coMap.d.ts.map +1 -1
  27. package/dist/tools/coValues/interfaces.d.ts +3 -0
  28. package/dist/tools/coValues/interfaces.d.ts.map +1 -1
  29. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +12 -0
  30. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
  31. package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
  32. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts +2 -1
  33. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts.map +1 -1
  34. package/dist/tools/subscribe/SubscriptionScope.d.ts +2 -1
  35. package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
  36. package/package.json +5 -5
  37. package/src/inspector/viewer/co-plain-text-view.tsx +17 -0
  38. package/src/inspector/viewer/new-app.tsx +2 -1
  39. package/src/inspector/viewer/page.tsx +5 -0
  40. package/src/inspector/viewer/type-icon.tsx +1 -0
  41. package/src/inspector/viewer/use-open-inspector.ts +18 -0
  42. package/src/inspector/viewer/use-page-path.ts +14 -1
  43. package/src/inspector/viewer/use-resolve-covalue.ts +1 -1
  44. package/src/inspector/viewer/value-renderer.tsx +4 -0
  45. package/src/react-native-core/media.tsx +2 -22
  46. package/src/tools/coValues/coFeed.ts +38 -0
  47. package/src/tools/coValues/coMap.ts +118 -14
  48. package/src/tools/coValues/interfaces.ts +14 -4
  49. package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +38 -0
  50. package/src/tools/implementation/zodSchema/zodCo.ts +6 -0
  51. package/src/tools/subscribe/CoValueCoreSubscription.ts +12 -9
  52. package/src/tools/subscribe/SubscriptionScope.ts +31 -19
  53. package/src/tools/tests/coFeed.test.ts +69 -0
  54. package/src/tools/tests/coMap.test.ts +480 -4
  55. package/src/tools/tests/load.test.ts +2 -1
  56. package/dist/chunk-FSIM7N33.js.map +0 -1
@@ -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/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\";\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] = useState(false);\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\nexport function usePagePath(defaultPath?: PageInfo[]) {\n const [path, setPath] = useState<PageInfo[]>([]);\n\n const updatePath = useCallback((newPath: PageInfo[]) => {\n setPath(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 { 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":";;;AAAA,OAAOA,YAAW;;;ACClB,SAAS,UAAAC,gBAAc;AACvB,SAAS,sBAAsB;AAC/B,SAAgB,YAAAC,iBAAgB;;;ACHhC,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAmErB;AA1DN,IAAM,eAAe,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQhB,CAAC,UAAW,MAAM,WAAW,SAAS,MAAO;AAAA,aACpD,CAAC,UAAW,MAAM,WAAW,MAAM,CAAE;AAAA,YACtC,CAAC,UAAW,MAAM,WAAW,gBAAgB,SAAU;AAAA;AAAA,IAE/D,CAAC,UAAU;AACX,UAAQ,MAAM,SAAS;AAAA,IACrB,KAAK;AACH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOT,KAAK;AACH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAST,KAAK;AACH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMT;AACE,aAAO;AAAA,EACX;AACF,CAAC;AAAA;AAGI,IAAM,SAAS;AAAA,EACpB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,OAAO;AAAA,IACP,GAAG;AAAA,EACL,GACA,QACG;AACH,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;;;AChFA,SAAS,UAAAC,eAAc;AACvB,SAAS,cAAAC,aAAY,aAAa;AAyC5B,SACE,OAAAC,MADF;AA1BN,IAAM,YAAYF,QAAO,KAAK;AAAA;AAAA;AAAA;AAK9B,IAAM,cAAcA,QAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe3B,IAAM,QAAQC;AAAA,EACnB,CAAC,EAAE,OAAO,WAAW,WAAW,IAAI,UAAU,GAAG,WAAW,GAAG,QAAQ;AACrE,UAAM,cAAc,MAAM;AAC1B,UAAM,KAAK,YAAY;AAEvB,WACE,qBAAC,aAAU,WACT;AAAA,sBAAAC,KAAC,WAAM,SAAS,IAAI,WAAW,YAAY,cAAc,IACtD,iBACH;AAAA,MACA,gBAAAA,KAAC,eAAY,KAAW,GAAG,YAAY,IAAQ;AAAA,OACjD;AAAA,EAEJ;AACF;;;AClDA,SAAS,UAAAC,eAAc;AACvB,OAAO,WAAW;AA2BZ,gBAAAC,MASI,QAAAC,aATJ;AAvBN,IAAM,uBAAuBC,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQzC,IAAM,YAAYA,QAAO,MAAM;AAAA;AAAA;AASxB,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AACF,MAAM;AACJ,SACE,gBAAAD,MAAC,wBACC;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAO,EAAE,SAAS,YAAY;AAAA,QAC9B,SAAS,MAAM,kBAAkB,EAAE;AAAA,QACpC;AAAA;AAAA,IAED;AAAA,IACC,KAAK,IAAI,CAAC,MAAM,UAAU;AACzB,aACE,gBAAAC,MAAC,MAAM,UAAN,EACC;AAAA,wBAAAD,KAAC,aAAU,eAAW,MAAC,eAAC;AAAA,QACxB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO,EAAE,SAAS,YAAY;AAAA,YAC9B,SAAS,MAAM,kBAAkB,KAAK;AAAA,YAErC,oBAAU,IAAI,KAAK,QAAQ,SAAS,KAAK;AAAA;AAAA,QAC5C;AAAA,WARmB,KAAK,IAS1B;AAAA,IAEJ,CAAC;AAAA,KACH;AAEJ;;;AClDA,SAAS,UAAAG,gBAAc;;;ACAvB,SAAS,UAAAC,gBAAc;AACvB,OAAOC,YAAW;;;ACFlB,SAAS,UAAAC,eAAc;AAkBd,gBAAAC,YAAA;AAhBT,IAAM,cAAcD,QAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAY1B,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AACF,GAAoD;AAClD,SAAO,gBAAAC,KAAC,eAAY,WAAuB,UAAS;AACtD;;;ACnBA,SAAS,UAAAC,eAAc;AAad,gBAAAC,YAAA;AAXT,IAAM,gBAAgBD,QAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAO1B,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AACF,GAAoD;AAClD,SAAO,gBAAAC,KAAC,iBAAc,WAAuB,UAAS;AACxD;;;ACdA,SAAS,UAAAC,eAAc;AACvB,OAAOC,YAAW;AAYd,gBAAAC,YAAA;AAFJ,IAAM,WAAWD,OAAM;AAAA,EACrB,CAAC,EAAE,OAAO,QAAQ,OAAO,QAAQ,MAAM,GAAG,KAAK,GAAG,QAChD,gBAAAC,KAAC,SAAI,KAAW,GAAG,MAAM;AAE7B;AAEA,IAAM,aAAaF,QAAO,QAAQ;AAAA,IAC9B,CAAC,UACD,MAAM,SACN;AAAA;AAAA,GAED;AAAA;AAAA,IAEC,CAAC,UACD,MAAM,UACN;AAAA;AAAA;AAAA,GAGD;AAAA;AAAA,IAEC,CAAC,UACD,MAAM,SACN;AAAA;AAAA,GAED;AAAA;AAAA,IAEC,CAAC,UACD,MAAM,UACN;AAAA;AAAA,GAED;AAAA;AAAA,IAEC,CAAC,UACD,MAAM,QACN;AAAA;AAAA,GAED;AAAA;AAGI,SAAS,KACd,OAQA;AACA,SAAO,gBAAAE,KAAC,cAAY,GAAG,OAAO;AAChC;;;AC5DA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;;;ACMpC,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;;;ACApC,SAAS,wBAAwB;AAGjC,SAAS,UAAAC,eAAc;AACvB,SAAS,WAAW,gBAAgB;AA6IhC,SAiHA,UAzDE,OAAAC,MAxDF,QAAAC,aAAA;AAtIJ,SAAS,oBAAoB,MAA0C;AACrE,SACE,OAAO,SAAS,YAChB,SAAS,QACT,UAAU,QACV,KAAK,SAAS;AAElB;AAEO,SAAS,mBAAmB,OAAwC;AACzE,QAAM,WAAW,OAAO,KAAK,MAAM,KAAK,EAAE,CAAC;AAC3C,MAAI,CAAC;AACH,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AAEF,QAAM,QAAQ,MAAM,MAAM,QAAiB,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK;AAEhE,MAAI,CAAC;AACH,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AACF,QAAM,YAAY,MAAM,CAAC;AACzB,MAAI,CAAC;AACH,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AAEF,MAAI,oBAAoB,SAAS,GAAG;AAClC,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,eAAe,oBAAoB;AAAA,EACjC;AAAA,EACA,iBAAiB;AACnB,GAGG;AACD,MAAI,kBAAkB,MAAM,SAAS,GAAG;AACtC,YAAQ,MAAM,MAAM,GAAG,CAAC;AAAA,EAC1B;AAEA,QAAM,SAAuB,CAAC;AAE9B,QAAM,wBAAwB;AAE9B,MAAI,qBAAqB,KAAK,IAAI;AAElC,aAAW,QAAQ,MAAM,MAAM,CAAC,GAAG;AACjC,QAAI,KAAK,SAAS,OAAO;AACvB;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,SAAS;AACzB,cAAQ,MAAM,+BAA+B,IAAI;AACjD,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,iBAAiB,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAEtE,WAAO,KAAK,KAAK;AAEjB,QAAI,KAAK,IAAI,IAAI,qBAAqB,KAAK;AACzC,2BAAqB,KAAK,IAAI;AAAA,IAChC;AAAA,EACF;AACA,QAAM,cACJ,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,WAAW;AAE3D,QAAM,OAAO,IAAI,KAAK,QAAQ,cAAc,EAAE,MAAM,YAAY,IAAI,CAAC,CAAC;AAEtE,QAAM,WACJ,gBAAgB,KAAK,MAAM,kBAAkB,IAAI,IAAI;AAEvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,kBAAkB,MAAM,SAAS;AAAA,IACjC,WACE,MAAM,CAAC,KAAK,oBAAoB,MAAM,CAAC,IAClC,MAAM,CAAC,EAAE,iBACV;AAAA,EACR;AACF;AAEA,IAAM,oBAAoB,OAAO,SAAgC;AAC/D,QAAM,cAAc,MAAM,KAAK,MAAM,GAAG,CAAC,EAAE,YAAY;AACvD,QAAM,aAAa,IAAI,WAAW,WAAW;AAC7C,QAAM,SAAS,WAAW;AAAA,IACxB,CAAC,KAAK,SAAS,MAAM,OAAO,aAAa,IAAI;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,IAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAKM;AACJ,QAAM,eAAe,MAAM;AACzB,UAAM,MAAM,IAAI;AAAA,MACd,IAAI,KAAK,CAAC,OAAO,GAAG,WAAW,EAAE,MAAM,SAAS,IAAI,CAAC,CAAC;AAAA,IACxD;AACA,UAAM,OAAO,SAAS,cAAc,GAAG;AACvC,SAAK,OAAO;AACZ,SAAK,WACH,aAAa,oBAAoB,GAAG,QAAQ,SAAS;AACvD,aAAS,KAAK,YAAY,IAAI;AAC9B,SAAK,MAAM;AACX,aAAS,KAAK,YAAY,IAAI;AAC9B,QAAI,gBAAgB,GAAG;AAAA,EACzB;AAEA,SACE,gBAAAA,MAAC,UAAO,SAAQ,aAAY,SAAS,cAAc;AAAA;AAAA,IAC7C;AAAA,KAEN;AAEJ;AAEA,IAAM,4BAA4BC,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAM9C,IAAM,mBAAmBA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAOrC,IAAM,wBAAwBA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS1C,IAAM,eAAeA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMjC,IAAM,wBAAwBA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAY1C,IAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AACF,MAGM;AACJ,SACE,gBAAAD,MAAC,6BACC;AAAA,oBAAAD,KAAC,UAAM,iBAAM;AAAA,IACb,gBAAAA,KAAC,UAAM,mBAAQ;AAAA,KACjB;AAEJ;AAEA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,MAAM,OAAO,IAAI,SAStB,IAAI;AACN,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,IAAI;AAE/C,YAAU,MAAM;AAEd,wBAAoB;AAAA,MAClB;AAAA,MACA,gBAAgB;AAAA,IAClB,CAAC,EACE,KAAK,CAAC,MAAM;AACX,UAAI,GAAG;AACL,gBAAQ,CAAC;AACT,YAAI,EAAE,SAAS,SAAS,OAAO,GAAG;AAEhC,8BAAoB;AAAA,YAClB;AAAA,UACF,CAAC,EAAE,KAAK,CAAC,MAAM;AACb,gBAAI,EAAG,SAAQ,CAAC;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC,EACA,QAAQ,MAAM,aAAa,KAAK,CAAC;AAAA,EACtC,GAAG,CAAC,KAAK,CAAC;AAEV,MAAI,CAAC,aAAa,CAAC,KAAM,QAAO,gBAAAA,KAAC,SAAI,qBAAO;AAE5C,MAAI,UAAW,QAAO,gBAAAA,KAAC,SAAI,wBAAU;AACrC,MAAI,CAAC,KAAM,QAAO,gBAAAA,KAAC,SAAI,qBAAO;AAE9B,QAAM,EAAE,MAAM,SAAS,IAAI;AAE3B,QAAM,YAAY,KAAK,aAAa,KAAK;AAEzC,SACE,gBAAAC,MAAA,YACE;AAAA,oBAAAA,MAAC,oBACC;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,SAAS,gBAAAA,KAAC,SAAO,sBAAY,gBAAe;AAAA;AAAA,MAC9C;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,SAAS,gBAAAC,MAAC,UAAM;AAAA,qBAAS,QAAQ,CAAC;AAAA,YAAE;AAAA,aAAG;AAAA;AAAA,MACzC;AAAA,MACA,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,SACE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,MAAM,GAAG,SAAS;AAAA,cAC5B,SAAS;AAAA,cACT;AAAA,cACA,OACE,aAAa,oBACT,iBACA;AAAA;AAAA,UAER;AAAA;AAAA,MAEJ;AAAA,OACF;AAAA,IACC,aAAa,eAAe,aAAa,eACxC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,SACE,gBAAAA,KAAC,yBACC,0BAAAA,KAAC,mBAAgB,MAAY,GAC/B;AAAA;AAAA,IAEJ,IACE;AAAA,KACN;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AACF,GAGG;AACD,QAAM,gBAAgB,OAAO,KAAK,MAAM,KAAK;AAC7C,QAAM,YAAY,cAAc,IAAI,CAAC,WAAW,OAAO,MAAM,UAAU,EAAE,CAAC,CAAC;AAE3E,SACE,gBAAAA,KAAC,gBACE,oBAAU,IAAI,CAAC,IAAI,QAClB,gBAAAC,MAAC,yBACC;AAAA,oBAAAD,KAAC,sBAAmB,MAAM,IAAwB,MAAY;AAAA,IAE7D,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG;AAAA,MAChC,CAAC,SACC,gBAAAC,MAAC,SACE;AAAA,YAAI,KAAK,KAAK,MAAM,EAAE,eAAe;AAAA,QAAG;AAAA,QACxC,KAAK,UAAU,KAAK,KAAK;AAAA,SAC5B;AAAA,IAEJ;AAAA,OAV0B,EAW5B,CACD,GACH;AAEJ;AAEO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAKG;AAGD,QAAM,aAAa,mBAAmB,KAAK;AAE3C,MAAI,WAAW,SAAS,UAAU;AAChC,QAAI,WAAW,UAAU,QAAW;AAClC,aAAO,gBAAAD,KAAC,SAAI,8BAAgB;AAAA,IAC9B;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO,WAAW;AAAA;AAAA,IACpB;AAAA,EAEJ;AAEA,MAAI,WAAW,SAAS,YAAY;AAClC,WAAO,gBAAAA,KAAC,kBAAe,OAAc,MAAY;AAAA,EACnD;AAEA,MAAI,WAAW,SAAS,UAAW,QAAO,gBAAAA,KAAC,SAAI,iCAAmB;AAElE,SAAO,gBAAAA,KAAC,SAAI,iCAAmB;AACjC;AAEA,SAAS,gBAAgB,EAAE,KAAK,GAAmB;AACjD,QAAM,aAAa,OAAO,OAAO,OAAO;AACxC,SAAO,gBAAAA,KAAC,SAAI,KAAK,WAAW,gBAAgB,IAAI,GAAG;AACrD;;;ADzVO,IAAM,iBAAiB,CAC5B,YACuC;AACvC,SAAO,kBAAkB,WAAW,wBAAwB;AAC9D;AAOO,IAAM,UAAU,CAAC,YAAkD;AACxE,SAAO,aAAa;AACtB;AASO,IAAM,YAAY,CAAC,YAAoD;AAC5E,SAAO,QAAQ,OAAO,KAAK,aAAa;AAC1C;AAEA,eAAsB,eACpB,WACA,MAcA;AACA,QAAM,QAAQ,MAAM,KAAK,KAAK,SAAS;AAEvC,MAAI,UAAU,eAAe;AAC3B,WAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,OAAO;AAC9B,QAAM,OAAO,MAAM;AAGnB,MAAI;AAEJ,MAAI,SAAS,SAAS;AACpB,QAAI,eAAe,QAAQ,GAAG;AAC5B,qBAAe;AAAA,IACjB,WAAW,UAAU,QAAQ,GAAG;AAC9B,qBAAe;AAAA,IACjB,WAAW,QAAQ,QAAQ,GAAG;AAC5B,qBAAe;AAAA,IACjB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,mBACP,WACA,MACA,UACA;AACA,SAAO,KAAK,UAAU,WAAW,CAAC,UAAU;AAC1C,QAAI,UAAU,eAAe;AAC3B,eAAS;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,QACN,cAAc;AAAA,MAChB,CAAC;AAAA,IACH,OAAO;AACL,YAAM,WAAW,MAAM,OAAO;AAC9B,YAAM,OAAO,MAAM;AACnB,UAAI;AAEJ,UAAI,SAAS,SAAS;AACpB,YAAI,eAAe,QAAQ,GAAG;AAC5B,yBAAe;AAAA,QACjB,WAAW,UAAU,QAAQ,GAAG;AAC9B,yBAAe;AAAA,QACjB,WAAW,QAAQ,QAAQ,GAAG;AAC5B,yBAAe;AAAA,QACjB;AAAA,MACF,WAAW,SAAS,YAAY;AAC9B,cAAM,WAAW,mBAAmB,KAAoB;AAExD,YAAI,SAAS,SAAS,UAAU;AAC9B,yBAAe;AAAA,QACjB;AAAA,MACF;AAEA,eAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEO,SAAS,mBACd,WACA,MACA;AACA,QAAM,CAAC,QAAQ,SAAS,IACtBG,UAAqD;AAEvD,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY;AAChB,UAAM,cAAc,mBAAmB,WAAW,MAAM,CAAC,cAAc;AACrE,UAAI,WAAW;AACb,kBAAU,SAAS;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,kBAAY;AACZ,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,SACE,UAAU;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAEJ;AAEO,SAAS,oBACd,YACA,MACA;AACA,QAAM,CAAC,SAAS,UAAU,IAAID,UAE5B,CAAC,CAAC;AAEJ,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY;AAChB,UAAM,eAA+B,CAAC;AAEtC,eAAW,QAAQ,CAAC,WAAW,UAAU;AACvC,YAAM,cAAc,mBAAmB,WAAW,MAAM,CAAC,cAAc;AACrE,YAAI,WAAW;AACb,qBAAW,CAAC,gBAAgB;AAC1B,kBAAM,aAAa,YAAY,MAAM,GAAG,WAAW,MAAM;AACzD,uBAAW,KAAK,IAAI;AACpB,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AACD,mBAAa,KAAK,WAAW;AAAA,IAC/B,CAAC;AAED,WAAO,MAAM;AACX,kBAAY;AACZ,mBAAa,QAAQ,CAAC,gBAAgB,YAAY,CAAC;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,YAAY,IAAI,CAAC;AAErB,SAAO;AACT;;;ADnLwB,SAgBf,YAAAC,WAhBe,OAAAC,YAAA;AA7BjB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,GAKG;AACD,QAAM,EAAE,UAAU,aAAa,IAAI,mBAAmB,MAAM,IAAI;AAChE,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAwB,IAAI;AAEpD,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY,OAAO,aAAa,YAAY,aAAa,UAAU;AACrE,YAAM,YAAY,SAAS;AAC3B,qBAAe,WAAW,IAAI,EAAE,KAAK,CAAC,kBAAkB;AACtD,YACE,cAAc,YACd,OAAO,cAAc,aAAa,YAClC,UAAU,cAAc,UACxB;AACA,kBAAQ,cAAc,SAAS,IAAc;AAAA,QAC/C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,UAAU,MAAM,YAAY,CAAC;AAEjC,MAAI,CAAC,SAAU,QAAO,gBAAAF,KAAC,UAAK,wBAAU;AACtC,MAAI,iBAAiB,aAAa,iBAAiB,SAAS;AAC1D,WAAO,gBAAAA,KAAC,UAAK,6CAA+B;AAAA,EAC9C;AAEA,QAAM,cAAc,iBAAiB,YAAY,QAAQ,YAAY;AACrE,QAAM,cAAc,SAAS,GAAG,WAAW,KAAK,IAAI,MAAM;AAE1D,MAAI,SAAS;AACX,WACE,gBAAAA,KAAC,UAAO,SAAQ,QAAO,SAAS,MAAM,QAAQ,WAAW,GACtD,uBACH;AAAA,EAEJ;AAEA,SAAO,gBAAAA,KAAAD,WAAA,EAAG,uBAAY;AACxB;;;AGlDA,SAAS,UAAAI,eAAc;AA0CP,gBAAAC,YAAA;AAnChB,IAAM,WAAWC,QAAO,MAAM;AAAA;AAAA;AAI9B,IAAM,kBAAkBA,QAAO,KAAK;AAAA;AAAA;AAIpC,IAAM,aAAaA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMxB,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,UAA2D;AAAA,IAC/D,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAEA,QAAM,UAAU,gBAAgB;AAChC,QAAMC,QAAO,QAAQ,OAA+B;AAEpD,SAAOA,QAAO,gBAAAF,KAAC,YAAU,UAAAE,OAAK,IAAc;AAC9C;AAEO,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AACF,MAGM;AACJ,QAAM,EAAE,MAAM,cAAc,SAAS,IAAI,mBAAmB,MAAM,IAAI;AAEtE,MAAI,aAAa,iBAAiB,CAAC,MAAM;AACvC,WAAO,gBAAAF,KAAC,mBAAgB,yBAAW;AAAA,EACrC;AAEA,MAAI,CAAC,KAAM,QAAO,gBAAAA,KAAC,cAAW,eAAC;AAE/B,SAAO,gBAAAA,KAAC,YAAS,MAAY,cAA4B;AAC3D;;;ACvDO,IAAM,SAAS,CAAC,SACrB,OAAO,SAAS,YAChB,KAAK,WAAW,KAAK,KACrB,CAAC,KAAK,SAAS,cAAc;;;ACT/B,SAAS,UAAAG,eAAc;AACvB,OAAOC,UAAS,YAAAC,iBAAgB;;;ACU1B,gBAAAC,aAAA;AAZC,SAAS,gBAAgB,OAAsC;AACpE,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,gBAAe;AAAA,MAEf,0BAAAA,MAAC,UAAK,GAAE,gBAAe;AAAA;AAAA,EACzB;AAEJ;;;ACbI,SAWE,OAAAC,OAXF,QAAAC,aAAA;AAFG,SAAS,WAAW,OAAsC;AAC/D,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,gBAAe;AAAA,MACf,WAAU;AAAA,MAEV;AAAA,wBAAAD,MAAC,UAAK,GAAE,WAAU;AAAA,QAClB,gBAAAA,MAAC,UAAK,GAAE,yCAAwC;AAAA,QAChD,gBAAAA,MAAC,UAAK,GAAE,sCAAqC;AAAA;AAAA;AAAA,EAC/C;AAEJ;;;ACRM,gBAAAE,aAAA;AAVC,SAAS,SAAS,OAAsC;AAC7D,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAO;AAAA,MACN,GAAG;AAAA,MAEJ,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,GAAE;AAAA;AAAA,MACJ;AAAA;AAAA,EACF;AAEJ;;;AC6CI,gBAAAC,aAAA;AA1DJ,IAAM,QAAQ;AAAA,EACZ,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,MAAM;AACR;AAGA,IAAM,QAAQ;AAAA,EACZ,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAEO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAGmC;AACjC,MAAI,CAAC,QAAQ,CAAC,MAAM,eAAe,IAAI,GAAG;AACxC,UAAM,IAAI,MAAM,mBAAmB,IAAI,EAAE;AAAA,EAC3C;AAGA,QAAM,gBAAgB,OAAO,eAAe,IAAI,IAAI,MAAM,IAAI,IAAI;AAElE,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,MAAM,MAAM,IAAI;AAAA,MAChB,aAAa,aAAa,IAAI;AAAA,MAC9B,eAAc;AAAA,MACb,GAAG;AAAA;AAAA,EACN;AAEJ;;;AJqBW,SASL,YAAAC,WATK,OAAAC,OASL,QAAAC,aATK;AAlFX,IAAM,gBAAgBC,QAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAMnC,IAAM,cAAcA,QAAO,MAAM;AAAA;AAAA,IAE7B,CAAC,UACD,MAAM,QACF;AAAA;AAAA,MAGA;AAAA;AAAA,GAEL;AAAA;AAGH,IAAM,gBAAgBA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMlC,IAAM,mBAAmBA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQrC,IAAM,cAAcA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMhC,IAAM,kBAAkBA,QAAO,IAAI;AAAA;AAAA;AAAA;AAKnC,IAAMC,yBAAwBD,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAM1C,IAAM,eAAeA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQjC,IAAM,aAAaA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAM/B,IAAM,WAAWA,QAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAOtB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,YAAY,aAAa,IAAIE,UAAS,KAAK;AAElD,MAAI,OAAO,SAAS,eAAe,SAAS,QAAW;AACrD,WAAO,gBAAAJ,MAAC,QAAK,OAAK,MAAC,uBAAS;AAAA,EAC9B;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,gBAAAA,MAAC,QAAK,OAAK,MAAC,kBAAI;AAAA,EACzB;AAEA,MAAI,OAAO,SAAS,YAAY,OAAO,IAAI,GAAG;AAC5C,UAAM,UACJ,gBAAAC,MAAAF,WAAA,EACG;AAAA;AAAA,MACA,eAAe,gBAAAC,MAAC,QAAK,MAAK,QAAO;AAAA,OACpC;AAGF,QAAI,aAAa;AACf,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,MAAM;AACb,0BAAc,IAAwB;AAAA,UACxC;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,WAAO,gBAAAA,MAAC,iBAAe,mBAAQ;AAAA,EACjC;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,gBAAAA,MAAC,QAAM,gBAAK;AAAA,EACrB;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,gBAAAA,MAAC,QAAK,MAAI,MAAE,gBAAK;AAAA,EAC1B;AAEA,MAAI,OAAO,SAAS,WAAW;AAC7B,WAAO,gBAAAA,MAAC,eAAY,OAAO,MAAO,eAAK,SAAS,GAAE;AAAA,EACpD;AACA,QAAM,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC;AAC7C,QAAM,YAAY,SACf,MAAM,IAAI,EACV,MAAM,GAAG,UAAU,IAAI,CAAC,EACxB,KAAK,IAAI;AAGZ,QAAM,gBAAgB,aAAa;AAEnC,MAAI,OAAO,SAAS,UAAU;AAC5B,WACE,gBAAAC,MAAAF,WAAA,EACE;AAAA,sBAAAC,MAAC,OAAG,gBAAM,QAAQ,IAAI,IAAI,gBAAAC,MAAAF,WAAA,EAAE;AAAA;AAAA,QAAQ,KAAK;AAAA,QAAO;AAAA,SAAC,IAAM,gBAAAC,MAAAD,WAAA,EAAE,oBAAM,GAAI;AAAA,MACnE,gBAAAE,MAAC,iBACE;AAAA,qBAAa,WAAW;AAAA,QAExB,iBAAiB,CAAC,aAAa,WAAW;AAAA,SAC7C;AAAA,MAEC,CAAC,WAAW,gBACX,gBAAAD,MAAC,UAAO,SAAQ,QAAO,SAAS,MAAM,cAAc,CAAC,UAAU,GAC5D,uBAAa,cAAc,aAC9B,IACE;AAAA,OACN;AAAA,EAEJ;AAEA,SAAO,gBAAAA,MAAC,UAAM,iBAAO,IAAI,GAAE;AAC7B;AAEO,IAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,QAAQ;AACV,MAIM;AACJ,QAAM,EAAE,OAAO,UAAU,MAAM,aAAa,IAAI;AAAA,IAC9C;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,UAAU;AACb,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,OAAO;AAAA,QACT;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,MAAI,aAAa,iBAAiB,CAAC,OAAO;AACxC,WACE,gBAAAA,MAAC,QAAK,QAAM,MAAC,OAAK,MAAC,yBAEnB;AAAA,EAEJ;AAEA,MAAI,iBAAiB,WAAW,eAAe,QAAQ,GAAG;AACxD,WACE,gBAAAC,MAACE,wBAAA,EACC;AAAA,sBAAAH,MAAC,gBAAa,KAAK,SAAS,oBAAoB;AAAA,MAChD,gBAAAC,MAAC,QAAK,QAAM,MAAC,OAAK,MAAC,OAAK,MACrB;AAAA,iBAAS,aAAa,CAAC;AAAA,QAAE;AAAA,QAAI,SAAS,aAAa,CAAC;AAAA,SACvD;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,iBAAiB,UAAU;AAC7B,WACE,gBAAAA,MAAC,cAAW;AAAA;AAAA,MACH;AAAA,MACP,gBAAAA,MAAC,QAAK,QAAM,MAAC,OAAK,MAAC;AAAA;AAAA,QACf,OAAO,KAAK,QAAQ,EAAE;AAAA,QAAO;AAAA,SACjC;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,SAAS,UAAU;AACrB,WACE,gBAAAA,MAAC,YAAS;AAAA;AAAA,MACH;AAAA,MACL,gBAAAA,MAAC,QAAK,QAAM,MAAC,OAAK,MAAC;AAAA;AAAA,QACd,SAA2B;AAAA,QAAO;AAAA,SACvC;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,aAAa,OAAO,QAAQ,QAAQ;AAC1C,QAAM,oBACJ,iBAAiB,YACb,WACG;AAAA,IACC,CAAC,CAAC,GAAG,MACH,CAAC,IAAI,WAAW,OAAO,KACvB,CAAC,IAAI,WAAW,UAAU,KAC1B,QAAQ;AAAA,EACZ,EACC,MAAM,GAAG,KAAK,IACjB,WAAW,MAAM,GAAG,KAAK;AAE/B,SACE,gBAAAA,MAAC,oBACC;AAAA,oBAAAD,MAAC,eACE,4BAAkB,IAAI,CAAC,CAAC,KAAKK,MAAK,MACjC,gBAAAJ,MAACK,OAAM,UAAN,EACC;AAAA,sBAAAL,MAAC,QAAK,QAAM,MAAE;AAAA;AAAA,QAAI;AAAA,SAAE;AAAA,MACpB,gBAAAD,MAAC,iBAAc,SAAO,MAAC,MAAMK,QAAO;AAAA,SAFjB,GAGrB,CACD,GACH;AAAA,IACC,WAAW,SAAS,SACnB,gBAAAJ,MAAC,mBAAgB,OAAK,MAAC,OAAK,MACzB;AAAA,iBAAW,SAAS;AAAA,MAAM;AAAA,OAC7B;AAAA,KAEJ;AAEJ;;;AKzQA,SAAS,UAAAM,gBAAc;AAChB,IAAM,OAAOA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAazB,IAAM,aAAaA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAM/B,IAAM,WAAWA,SAAO,KAAK;AAAA;AAAA;;;ACpBpC,SAAS,UAAAC,gBAAc;AAuCV,gBAAAC,aAAA;AArCb,IAAM,mBAAmBD,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcrC,IAAM,iBAAiBA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUnC,IAAM,gBAAgBA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAM3B,SAAS,KACd,OACA;AACA,QAAM,EAAE,MAAM,UAAU,GAAG,KAAK,IAAI;AAEpC,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,gBAAAC,MAAC,iBAAe,GAAG,MAAO,UAAS;AAAA,IAC5C,KAAK;AACH,aAAO,gBAAAA,MAAC,kBAAgB,GAAG,MAAO,UAAS;AAAA,IAC7C,KAAK;AACH,aAAO,gBAAAA,MAAC,oBAAkB,GAAG,MAAO,UAAS;AAAA,IAC/C;AACE,YAAM,IAAI,MAAM,8BAA8B,IAAI,EAAE;AAAA,EACxD;AACF;;;ACPU,qBAAAC,WACE,OAAAC,OADF,QAAAC,aAAA;AA7BV,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,KAAK,KAAK,IAAI;AACrB,QAAM,YAAY,OAAO,KAAK;AAE9B,QAAM,QAAQ,YACV;AAAA,IACE,SAAS,MACP,WAAW,CAAC,EAAE,MAAM,OAA2B,MAAM,IAAI,CAAC,CAAC;AAAA,IAC7D,IAAI;AAAA,EACN,IACA;AAAA,IACE,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAEJ,SACE,gBAAAA,MAAC,QAAM,GAAG,OACR;AAAA,oBAAAD,MAAC,cACE,sBACC,gBAAAC,MAAAF,WAAA,EACE;AAAA,sBAAAC,MAAC,QAAK,QAAM,MAAE,eAAI;AAAA,MAClB,gBAAAA,MAAC,SACC,0BAAAA,MAAC,eAAY,MAAM,OAA2B,MAAY,GAC5D;AAAA,OACF,IAEA,gBAAAA,MAAC,QAAK,QAAM,MAAE,eAAI,GAEtB;AAAA,IACA,gBAAAA,MAAC,YAAS,OAAO,EAAE,WAAW,aAAa,GACxC,sBACC,gBAAAA,MAAC,gBAAa,MAAM,OAA2B,MAAY,IAE3D,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,aAAa,CAAC,SAAS;AACrB,qBAAW,CAAC,EAAE,MAAM,MAAM,IAAI,CAAC,CAAC;AAAA,QAClC;AAAA;AAAA,IACF,GAEJ;AAAA,KACF;AAEJ;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,UAAU,OAAO,QAAQ,IAAI;AAEnC,SACE,gBAAAA,MAAC,QAAK,MAAM,QAAQ,WAAW,IAAI,IAAI,GACpC,kBAAQ,IAAI,CAAC,OAAO,eACnB,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACK;AAAA,EACP,CACD,GACH;AAEJ;;;ACxFA,SAAS,aAAAE,YAAW,YAAAC,iBAAgB;AAqBhC,gBAAAC,OAqBE,QAAAC,aArBF;AAfJ,SAAS,WAAW,EAAE,KAAK,GAAyB;AAClD,QAAM,CAAC,WAAW,YAAY,IAAIC,UAAS,CAAC;AAC5C,QAAM,SAAS,YAAY;AAC3B,QAAM,kBAAkB,KAAK,UAAU,IAAI;AAE3C,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY,GAAG;AACjB,YAAM,UAAU,WAAW,MAAM,aAAa,CAAC,GAAG,GAAI;AACtD,aAAO,MAAM;AACX,qBAAa,OAAO;AAAA,MACtB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA,SAAS,MAAM;AACb,eAAO,UAAU,UAAU,UAAU,eAAe,EAAE,KAAK,MAAM;AAC/D,uBAAa,CAAC,UAAU,QAAQ,CAAC;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,MACA,SAAQ;AAAA,MAEP,mBAAS,WAAW;AAAA;AAAA,EACvB;AAEJ;AAEO,SAAS,YAAY,EAAE,KAAK,GAAyB;AAC1D,SACE,gBAAAC,MAAC,QAAK,OAAO,EAAE,UAAU,WAAW,GAClC;AAAA,oBAAAA,MAAC,cACC;AAAA,sBAAAD,MAAC,QAAK,QAAM,MAAC,sBAAQ;AAAA,MACrB,gBAAAA,MAAC,cAAW,MAAY;AAAA,OAC1B;AAAA,IACA,gBAAAA,MAAC,YACC,0BAAAA,MAAC,iBAAc,MAAM,MAAM,GAC7B;AAAA,KACF;AAEJ;;;ACzBI,qBAAAI,WACE,OAAAC,OADF,QAAAC,aAAA;AAtBG,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,eAAe,EAAE,GAAG,KAAK;AAE/B,aAAW,OAAO,cAAc;AAC9B,QACE,QAAQ,aACR,IAAI,WAAW,UAAU,KACzB,IAAI,WAAW,OAAO,GACtB;AACA,aAAO,aAAa,GAAG;AAAA,IACzB;AAAA,EACF;AAEA,SACE,gBAAAA,MAAAF,WAAA,EACE;AAAA,oBAAAC,MAAC,YAAS,MAAM,cAAc,YAAwB,MAAY;AAAA,IAElE,gBAAAA,MAAC,eAAY,MAAY;AAAA,KAC3B;AAEJ;;;ACjCA,SAAS,UAAAE,gBAAc;AACvB,OAAOC,YAAW;AAwChB,gBAAAC,aAAA;AAtCF,IAAM,cAAcF,SAAO,OAAO;AAAA;AAAA;AAIlC,IAAM,cAAcA,SAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUlC,IAAM,cAAcA,SAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUlC,IAAM,WAAWA,SAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAM5B,IAAM,WAAWA,SAAO,IAAI;AAAA;AAAA;AAIrB,IAAM,QAAQC,OAAM,WAGzB,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QACzB,gBAAAC,MAAC,eAAY,KAAW,GAAG,OACxB,UACH,CACD;AAEM,IAAM,YAAYD,OAAM,WAG7B,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QACzB,gBAAAC,MAAC,eAAY,KAAW,GAAG,OACxB,UACH,CACD;AAEM,IAAM,YAAYD,OAAM,WAG7B,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QACzB,gBAAAC,MAAC,eAAY,KAAW,GAAG,OACxB,UACH,CACD;AAEM,IAAM,WAAWD,OAAM,WAG5B,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QACzB,gBAAAC,MAAC,QAAG,KAAW,GAAG,OACf,UACH,CACD;AAEM,IAAM,cAAcD,OAAM,WAG/B,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QACzB,gBAAAC,MAAC,YAAS,KAAW,GAAG,OACrB,UACH,CACD;AAEM,IAAM,YAAYD,OAAM,WAG7B,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QACzB,gBAAAC,MAAC,YAAS,KAAW,GAAG,OACrB,UACH,CACD;;;AChEG,qBAAAC,WACE,OAAAC,OAII,QAAAC,aALN;AAVG,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SACE,gBAAAA,MAAAF,WAAA,EACE;AAAA,oBAAAC,MAAC,QAAK,QAAM,MAAC,qBAAO;AAAA,IAEpB,gBAAAC,MAAC,SACC;AAAA,sBAAAD,MAAC,aACC,0BAAAC,MAAC,YACC;AAAA,wBAAAD,MAAC,eAAY,qBAAO;AAAA,QACpB,gBAAAA,MAAC,eAAY,wBAAU;AAAA,SACzB,GACF;AAAA,MACA,gBAAAC,MAAC,aACE;AAAA,sBAAc,QAAQ,OAAO,KAAK,aAAa,WAC9C,gBAAAA,MAAC,YACC;AAAA,0BAAAD,MAAC,aAAU,sBAAQ;AAAA,UACnB,gBAAAA,MAAC,aAAW,eAAK,UAAS;AAAA,WAC5B,IACE;AAAA,QAEH,OAAO,QAAQ,IAAI,EAAE;AAAA,UAAI,CAAC,CAAC,KAAK,KAAK,MACpC,OAAO,GAAG,IACR,gBAAAC,MAAC,YACC;AAAA,4BAAAD,MAAC,aACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM;AAAA,gBACN;AAAA,gBACA,QAAM;AAAA,gBACN,SAAS,MAAM;AACb,6BAAW,CAAC,EAAE,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;AAAA,gBACvC;AAAA;AAAA,YACF,GACF;AAAA,YACA,gBAAAA,MAAC,aAAW,iBAAgB;AAAA,eAXf,GAYf,IACE;AAAA,QACN;AAAA,SACF;AAAA,OACF;AAAA,IAEA,gBAAAA,MAAC,eAAY,MAAY;AAAA,KAC3B;AAEJ;;;ACxCS,iBAAAE,cAAA;AAtBF,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,EAAE,SAAS,IAAI,mBAAmB,MAAM,MAAM,IAAI,IAAI;AAE5D,MAAI,CAAC,YAAY,aAAa,eAAe;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI;AAEJ,MAAI,MAAM,MAAM,MAAM,KAAK,gBAAgB,EAAE,IAAI;AAC/C,WAAO;AAAA,EACT,WAAW,SAAS,KAAK,gBAAgB,EAAE,EAAE,GAAG;AAC9C,WAAO,SAAS,KAAK,gBAAgB,EAAE,EAAE;AAAA,EAC3C,WAAW,SAAS,UAAU;AAC5B,WAAO,SAAS;AAAA,EAClB,OAAO;AACL,WAAO;AAAA,EACT;AAEA,SAAO,gBAAAA,OAAC,QAAK;AAAA;AAAA,IAAO;AAAA,KAAK;AAC3B;;;ACzBA,SAAS,UAAAC,gBAAc;AACvB,SAAS,SAAS,YAAAC,iBAAgB;AAkDvB,SAgBP,YAAAC,WAhBO,OAAAC,OA2BC,QAAAC,cA3BD;AAlCX,IAAM,sBAAsBC,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQxC,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIC,UAAS,EAAE;AAC3D,QAAM,CAAC,WAAW,WAAW,IAAI,QAAQ,MAAM;AAC7C,UAAMC,aAAY,MAAM,QAAQ,IAAI,IAChC,OACA,OAAO,OAAO,IAAI,EAAE,MAAM,CAAC,MAAM,OAAO,MAAM,YAAY,OAAO,CAAC,CAAC,IACjE,OAAO,OAAO,IAAI,EAAE,IAAI,CAAC,MAAM,CAAqB,IACpD,CAAC;AAEP,UAAMC,eAAcD,WAAU,MAAM,GAAG,gBAAgB;AAEvD,WAAO,CAACA,YAAWC,YAAW;AAAA,EAChC,GAAG,CAAC,MAAM,gBAAgB,CAAC;AAC3B,QAAM,eAAe,oBAAoB,aAAa,IAAI;AAE1D,QAAM,UAAU,mBAAmB,UAAU;AAE7C,MAAI,CAAC,UAAU,QAAQ;AACrB,WAAO,gBAAAL,MAAC,SAAI,gCAAkB;AAAA,EAChC;AAEA,MAAI,aAAa,WAAW,GAAG;AAC7B,WAAO,gBAAAA,MAAC,SAAI,wBAAU;AAAA,EACxB;AAEA,QAAM,OAAO,MAAM;AAAA,IACjB,IAAI,IAAI,aAAa,QAAQ,CAAC,SAAS,OAAO,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAAA,EAC1E;AAEA,QAAM,WAAW,MAAM;AACrB,wBAAoB,CAAC,oBAAoB,kBAAkB,EAAE;AAAA,EAC/D;AAEA,SACE,gBAAAC,OAAAF,WAAA,EACE;AAAA,oBAAAE,OAAC,SACC;AAAA,sBAAAD,MAAC,aACC,0BAAAA,MAAC,YACE,WAAC,GAAG,MAAM,QAAQ,EAAE,IAAI,CAAC,QACxB,gBAAAA,MAAC,eAAuB,iBAAN,GAAU,CAC7B,GACH,GACF;AAAA,MACA,gBAAAA,MAAC,aACE,uBAAa,MAAM,GAAG,gBAAgB,EAAE,IAAI,CAAC,MAAM,UAClD,gBAAAC,OAAC,YACE;AAAA,aAAK,IAAI,CAAC,QACT,gBAAAD,MAAC,aACC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAO,KAAK,SAAwB,GAAG;AAAA,YACvC,aAAa,CAAC,SAAS;AACrB,6BAAe,cAAc;AAC3B,2BAAW;AAAA,kBACT;AAAA,oBACE,MAAM,KAAK,MAAO;AAAA,oBAClB,MAAM,MAAM,SAAS;AAAA,kBACvB;AAAA,kBACA;AAAA,oBACE;AAAA,oBACA,MAAM;AAAA,kBACR;AAAA,gBACF,CAAC;AAAA,cACH;AAEA,0BAAY;AAAA,YACd;AAAA;AAAA,QACF,KAnBc,GAoBhB,CACD;AAAA,QAED,gBAAAA,MAAC,aACC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MACP,WAAW;AAAA,cACT;AAAA,gBACE,MAAM,KAAK,MAAO;AAAA,gBAClB,MAAM,MAAM,SAAS;AAAA,cACvB;AAAA,YACF,CAAC;AAAA,YAEJ;AAAA;AAAA,QAED,GACF;AAAA,WAvCa,KAwCf,CACD,GACH;AAAA,OACF;AAAA,IACA,gBAAAC,OAAC,uBACC;AAAA,sBAAAA,OAAC,QAAK,OAAK,MAAC,OAAK,MAAC;AAAA;AAAA,QACP,KAAK,IAAI,kBAAkB,UAAU,MAAM;AAAA,QAAE;AAAA,QAAI;AAAA,QACzD,UAAU;AAAA,SACb;AAAA,MACC,WACC,gBAAAD,MAAC,UAAO,SAAQ,aAAY,SAAS,UAAU,uBAE/C;AAAA,OAEJ;AAAA,KACF;AAEJ;AAEO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,mBAAmB,QAAQ,MAAM;AACrC,WAAO,MAAM,QAAQ,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,OAAO,CAAC,CAAC;AAAA,EAC3D,GAAG,CAAC,IAAI,CAAC;AAGT,MAAI,kBAAkB;AACpB,WACE,gBAAAA,MAAC,qBAAkB,MAAY,MAAY,YAAwB;AAAA,EAEvE;AAGA,SACE,gBAAAC,OAAC,SACC;AAAA,oBAAAD,MAAC,aACC,0BAAAC,OAAC,YACC;AAAA,sBAAAD,MAAC,eAAY,OAAO,EAAE,OAAO,OAAO,GAAG,mBAAK;AAAA,MAC5C,gBAAAA,MAAC,eAAY,mBAAK;AAAA,OACpB,GACF;AAAA,IACA,gBAAAA,MAAC,aACE,gBAAM,QAAQ,IAAI,KACjB,MAAM,IAAI,CAAC,OAAO,UAChB,gBAAAC,OAAC,YACC;AAAA,sBAAAD,MAAC,aACC,0BAAAA,MAAC,QAAK,MAAI,MAAE,iBAAM,GACpB;AAAA,MACA,gBAAAA,MAAC,aACC,0BAAAA,MAAC,iBAAc,MAAM,OAAO,GAC9B;AAAA,SANa,KAOf,CACD,GACL;AAAA,KACF;AAEJ;;;AtBjKoC,SA8J1B,YAAAM,WA9J0B,OAAAC,OA4IpB,QAAAC,cA5IoB;AADpC,IAAM,oBAAoBC,OAAM;AAAA,EAC9B,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,QAAQ,gBAAAF,MAAC,SAAI,KAAW,GAAG,MAAM;AAC7D;AAEA,IAAM,gBAAgBG,SAAO,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS9C,IAAM,aAAaA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ/B,IAAM,kBAAkBA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpC,IAAM,iBAAiBA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMnC,IAAM,QAAQA,SAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAO5B,IAAM,iBAAiBA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMnC,IAAM,mBAAmBA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBrC,SAAS,KACP,OACA;AACA,QAAM,EAAE,MAAM,aAAa,IAAI,MAAM;AACrC,QAAM,EAAE,UAAU,MAAM,IAAI,MAAM;AAClC,QAAM,EAAE,MAAM,WAAW,IAAI;AAE7B,MAAI,CAAC,YAAY,aAAa,cAAe;AAE7C,MAAI,SAAS,YAAY;AACvB,WACE,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,iBAAiB,SAAS;AAC5B,WAAO,gBAAAA,MAAC,aAAU,MAAM,UAAU,MAAY,YAAwB;AAAA,EACxE;AAEA,MAAI,iBAAiB,WAAW;AAC9B,WAAO,gBAAAA,MAAC,eAAY,MAAM,UAAU,MAAY,YAAwB;AAAA,EAC1E;AAEA,MAAI,SAAS,YAAY,iBAAiB,UAAU;AAClD,WAAO,gBAAAA,MAAC,aAAU,MAAM,UAAU,MAAY,YAAwB;AAAA,EACxE;AAEA,SAAO,gBAAAA,MAAC,YAAS,MAAM,UAAU,YAAwB,MAAY;AACvE;AAEO,SAAS,KAAK,OAAkB;AACrC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,EACF,IAAI;AACJ,QAAM,UAAU,mBAAmB,MAAM,IAAI;AAE7C,QAAM,EAAE,OAAO,UAAU,MAAM,aAAa,IAAI;AAEhD,MAAI,aAAa,eAAe;AAC9B,WAAO,gBAAAA,MAAC,SAAI,OAAc,8BAAgB;AAAA,EAC5C;AAEA,MAAI,CAAC,UAAU;AACb,WAAO,gBAAAA,MAAC,SAAI,OAAc;AAAA,EAC5B;AAEA,SACE,gBAAAC,OAAC,iBAAc,OAAc,WAAsB,YAChD;AAAA,KAAC,cACA,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,cAAW;AAAA,QACX,SAAS,MAAM;AACb,0BAAgB;AAAA,QAClB;AAAA,QACA,eAAY;AAAA;AAAA,IACb;AAAA,IAEH,gBAAAA,MAAC,mBACC,0BAAAC,OAAC,kBACC;AAAA,sBAAAD,MAAC,SACC,0BAAAC,OAAC,UACE;AAAA;AAAA,QACA,OAAO,aAAa,YAAY,UAAU,WACzC,gBAAAA,OAAC,UAAK,OAAO,EAAE,OAAO,WAAW,YAAY,IAAI,GAC9C;AAAA;AAAA,UACC,SAA8B;AAAA,WAClC,IACE;AAAA,SACN,GACF;AAAA,MACA,gBAAAA,OAAC,kBACC;AAAA,wBAAAD,MAAC,SACE,kBAAQ,gBAAAA,MAAC,YAAS,MAAY,cAA4B,GAC7D;AAAA,QACA,gBAAAA,MAAC,SAAO,gBAAK;AAAA,SACf;AAAA,OACF,GACF;AAAA,IACA,gBAAAC,OAAC,oBACC;AAAA,sBAAAD,MAAC,QAAM,GAAG,OAAO,SAAkB;AAAA,MAClC,iBAAiB,aAAa,iBAAiB,WAC9C,gBAAAC,OAAAF,WAAA,EACE;AAAA,wBAAAC,MAAC,eAAY,MAAY,OAAc;AAAA,QACvC,gBAAAC,OAAC,QAAK,OAAK,MAAC;AAAA;AAAA,UACD;AAAA,UACT,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,MAAM,MAAM;AAAA,cAClB;AAAA,cACA,QAAM;AAAA,cACN,SAAS,MAAM;AACb,2BAAW,CAAC,EAAE,MAAM,MAAM,MAAM,IAAI,MAAM,QAAQ,CAAC,CAAC;AAAA,cACtD;AAAA;AAAA,UACF;AAAA,WACF;AAAA,SACF;AAAA,OAEJ;AAAA,KACF;AAEJ;;;AD/JI,qBAAAI,WAIM,OAAAC,OAHJ,QAAAC,cADF;AApBJ,IAAM,qBAAqBC,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAShC,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,QAAM,QAAQ,KAAK,SAAS;AAE5B,SACE,gBAAAF,MAAAD,WAAA,EACE,0BAAAE,OAAC,sBACE;AAAA;AAAA,IACA,QAAQ,QACP,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX;AAAA,QACA,MAAM,KAAK,QAAQ,KAAK;AAAA,QACxB,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,YAAY,UAAU,KAAK,SAAS;AAAA;AAAA,IACtC;AAAA,KAEJ,GACF;AAEJ;;;AwBtDA,SAAS,aAAa,aAAAG,YAAW,YAAAC,iBAAgB;AAG1C,SAAS,YAAY,aAA0B;AACpD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAqB,CAAC,CAAC;AAE/C,QAAM,aAAa,YAAY,CAAC,YAAwB;AACtD,YAAQ,OAAO;AAAA,EACjB,GAAG,CAAC,CAAC;AAEL,EAAAD,WAAU,MAAM;AACd,QAAI,eAAe,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,WAAW,GAAG;AACvE,iBAAW,WAAW;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,aAAa,MAAM,UAAU,CAAC;AAElC,QAAM,WAAW;AAAA,IACf,CAAC,aAAyB;AACxB,iBAAW,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;AAAA,IACnC;AAAA,IACA,CAAC,MAAM,UAAU;AAAA,EACnB;AAEA,QAAM,YAAY;AAAA,IAChB,CAAC,UAAkB;AACjB,iBAAW,KAAK,MAAM,GAAG,QAAQ,CAAC,CAAC;AAAA,IACrC;AAAA,IACA,CAAC,MAAM,UAAU;AAAA,EACnB;AAEA,QAAM,UAAU;AAAA,IACd,CAAC,SAA2B;AAC1B,iBAAW,CAAC,EAAE,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA,IACrC;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,KAAK,SAAS,GAAG;AACnB,iBAAW,KAAK,MAAM,GAAG,KAAK,SAAS,CAAC,CAAC;AAAA,IAC3C;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,CAAC;AAErB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACnDA,SAAS,UAAAE,gBAAc;AAEhB,IAAM,eAAeA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACFxC,SAAS,UAAAC,gBAAc;AAwDnB,SAQI,OAAAC,OARJ,QAAAC,cAAA;AA7CJ,IAAM,wBAAwBF,SAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYzC,CAAC,UAAU;AACX,UAAQ,MAAM,UAAU;AAAA,IACtB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF,CAAC;AAAA;AAGH,IAAM,WAAWA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQtB,SAAS,gBAAgB;AAAA,EAC9B,WAAW;AAAA,EACX,GAAG;AACL,GAAuE;AACrE,SACE,gBAAAE,OAAC,yBAAsB,UAAqB,GAAG,aAC7C;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QACR,MAAK;AAAA,QAEL,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,UAAS;AAAA,YACT,UAAS;AAAA,YACT,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,QAAQ;AAAA,QACV;AAAA,QACD;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;;;A9BlBI,SAiFU,YAAAE,YAjFV,OAAAC,OAqCE,QAAAC,cArCF;AAvDJ,IAAM,qBAAqBC,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBvC,IAAMC,mBAAkBD,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQpC,IAAM,OAAOA,SAAO,MAAM;AAAA;AAAA;AAI1B,IAAM,cAAcA,SAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAajC,IAAM,SAASA,SAAO,GAAG;AAAA;AAAA;AAIlB,SAAS,cAAc,EAAE,WAAW,QAAQ,GAA4B;AAC7E,QAAM,UAAU,eAAwB;AACxC,QAAM,YAAY,QAAQ;AAC1B,QAAM,KAAK,QAAQ,UAAU,QAAQ,KAAK;AAE1C,MAAI,QAAQ,IAAI,aAAa,cAAe,QAAO;AAEnD,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,IAAI,KAAK;AAAA;AAAA,EACtB;AAEJ;AAEO,SAAS,sBAAsB;AAAA,EACpC,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,MAAM,OAAO,IAAII,UAAS,KAAK;AACtC,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAgC,EAAE;AACpE,QAAM,EAAE,MAAM,UAAU,WAAW,QAAQ,QAAQ,IAAI,YAAY;AAEnE,QAAM,wBAAwB,CAAC,MAAuB;AACpD,MAAE,eAAe;AACjB,QAAI,WAAW;AACb,cAAQ,SAAS;AAAA,IACnB;AACA,iBAAa,EAAE;AAAA,EACjB;AAEA,MAAI,CAAC,MAAM;AACT,WACE,gBAAAJ,MAAC,mBAAgB,UAAoB,SAAS,MAAM,QAAQ,IAAI,GAAG;AAAA,EAEvE;AAEA,SACE,gBAAAC,OAAC,sBAAmB,IAAI,cAAc,OAAO,EAAE,QAAQ,IAAI,GACzD;AAAA,oBAAAA,OAACE,kBAAA,EACC;AAAA,sBAAAH,MAAC,eAAY,MAAY,mBAAmB,WAAW;AAAA,MACvD,gBAAAA,MAAC,QAAK,UAAU,uBACb,eAAK,WAAW,KACf,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,YAAY,YAAY;AAAA,UACjC,WAAS;AAAA,UACT,aAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,aAAa,EAAE,OAAO,KAAyB;AAAA;AAAA,MAClE,GAEJ;AAAA,MACA,gBAAAA,MAAC,UAAO,SAAQ,SAAQ,MAAK,UAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,mBAErE;AAAA,OACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QAEC,eAAK,UAAU,KACd,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,UAAU;AAAA,YACV,eAAa,KAAK,WAAW;AAAA,YAE7B;AAAA,8BAAAD,MAAC,WAAQ,oCAAsB;AAAA,cAC/B,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,OAAO,EAAE,UAAU,SAAS,YAAY,YAAY;AAAA,kBACpD,WAAS;AAAA,kBACT,aAAY;AAAA,kBACZ,OAAO;AAAA,kBACP,UAAU,CAAC,MAAM,aAAa,EAAE,OAAO,KAAyB;AAAA;AAAA,cAClE;AAAA,cACA,gBAAAA,MAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,6BAExC;AAAA,cAEC,aACC,gBAAAC,OAAAF,YAAA,EACE;AAAA,gCAAAC,MAAC,UAAO,gBAAE;AAAA,gBAEV,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,SAAS,MAAM;AACb,mCAAa,SAAS;AACtB,8BAAQ,SAAS;AAAA,oBACnB;AAAA,oBACD;AAAA;AAAA,gBAED;AAAA,iBACF;AAAA;AAAA;AAAA,QAEJ;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;;;A+B1KA,SAAS,UAAAK,gBAAc;AACvB,SAAS,SAAAC,cAAa;AAwDhB,gBAAAC,OAIA,QAAAC,cAJA;AArDN,IAAM,kBAAkBC,SAAO,KAAK;AAAA;AAAA;AAAA;AAKpC,IAAM,gBAAgBA,SAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAMlC,IAAM,eAAeA,SAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBpC,IAAM,aAAaA,SAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWzB,SAAS,OACd,OAIA;AACA,QAAM,EAAE,OAAO,WAAW,IAAI,UAAU,WAAW,GAAG,YAAY,IAAI;AACtE,QAAM,cAAcC,OAAM;AAC1B,QAAM,KAAK,YAAY;AAEvB,SACE,gBAAAF,OAAC,mBAAgB,WACf;AAAA,oBAAAD,MAAC,WAAM,SAAS,IAAI,WAAW,YAAY,cAAc,IACtD,iBACH;AAAA,IAEA,gBAAAC,OAAC,iBACC;AAAA,sBAAAD,MAAC,gBAAc,GAAG,aAAa,IAC5B,gBAAM,UACT;AAAA,MAEA,gBAAAA,MAAC,cACC,0BAAAA,MAAC,QAAK,MAAK,eAAc,MAAK,MAAK,GACrC;AAAA,OACF;AAAA,KACF;AAEJ;;;AhCpDA,SAAS,aAAa;AAEtB,MAAMI,OAAM,aAAa;","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","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,5 @@
1
+ import { JsonObject } from "cojson";
2
+ export declare function CoPlainTextView({ data, }: {
3
+ data: JsonObject;
4
+ }): import("react/jsx-runtime").JSX.Element | undefined;
5
+ //# sourceMappingURL=co-plain-text-view.d.ts.map
@@ -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":"new-app.d.ts","sourceRoot":"","sources":["../../../src/inspector/viewer/new-app.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAc,MAAM,QAAQ,CAAC;AAajE,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAiDvE,wBAAgB,aAAa,CAAC,EAAE,QAAkB,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,kDAc5E;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAkB,EAClB,SAAS,EACT,SAAS,GACV,EAAE;IACD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;CAC9B,2CAoFA"}
1
+ {"version":3,"file":"new-app.d.ts","sourceRoot":"","sources":["../../../src/inspector/viewer/new-app.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAc,MAAM,QAAQ,CAAC;AAajE,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAkDvE,wBAAgB,aAAa,CAAC,EAAE,QAAkB,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,kDAc5E;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAkB,EAClB,SAAS,EACT,SAAS,GACV,EAAE;IACD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;CAC9B,2CAoFA"}
@@ -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;AAY1B,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;AAqCF,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,2CA4EpC"}
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,mDAgBA,CAAC;AAEF,eAAO,MAAM,WAAW,oBAGrB;IACD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB,4CAUA,CAAC"}
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"}