@driftime/sanity-plugin-handbook 0.3.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ComponentProps","defaultTitle","defaultDocumentTitle","defaultUndocumentedFieldMessage","defaultIconProps","width","height","strokeWidth","ComponentProps","BookOpenTextIconProps","BookOpenTextIcon","props","$","_c","t0","t1","t2","t3","t4","t5","Symbol","for","t6","ComponentProps","ComponentType","createElement","defaultIconProps","createSanityIcon","icon","props","Icon","SanityIcon","ComponentProps","PortableCodeProps","PortableCode","t0","$","_c","props","style","t1","paddingBlock","paddingInline","fontSize","backgroundColor","borderRadius","t2","BlockDecoratorProps","PortableCode","CodeDecorator","t0","$","_c","children","t1","Text","BlockListItemProps","ListItemStyle","t0","$","_c","children","t1","Symbol","for","marginTop","t2","Box","Text","BoxProps","PortableBlockquoteProps","muted","PortableBlockquote","t0","$","_c","children","props","style","t1","borderLeft","t2","Symbol","for","fontStyle","t3","t4","Text","TextProps","PortableHeadingProps","Omit","PortableHeading","props","$","_c","t0","Text","TextProps","PortableParagraphProps","PortableParagraph","props","$","_c","t0","BlockStyleProps","PortableBlockquote","PortableHeading","PortableParagraph","ParagraphStyle","t0","$","_c","children","t1","HeadingStyle","BlockquoteStyle","defineArrayMember","defineField","PortableTextObject","Strict","SanityHandbookLink","_type","href","linkAnnotation","name","type","description","preview","select","prepare","selection","title","fields","validation","rule","uri","scheme","ComponentProps","InfoIconProps","InfoIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","ComponentProps","LightbulbIconProps","LightbulbIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","ComponentProps","TriangleAlertIconProps","TriangleAlertIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","Card","Flex","Text","CardProps","CardTone","ComponentProps","ComponentType","ReactNode","defaultIconProps","InfoIcon","LightbulbIcon","TriangleAlertIcon","CalloutVariant","CalloutVariantStyle","icon","tone","CalloutContentProps","Omit","variant","children","presentation","Record","tip","info","warning","CalloutContent","t0","$","_c","props","Icon","t1","Symbol","for","flexShrink","marginTop","fontSize","color","t2","t3","t4","t5","t6","PreviewProps","CalloutContent","CalloutVariant","SanityHandbookCallout","CalloutPreviewProps","variant","body","CalloutPreview","t0","$","_c","t1","t2","Symbol","for","display","flexDirection","gap","t3","map","_temp2","t4","t5","_key","children","whiteSpace","_temp","join","child","text","ComponentProps","MessageCircleIconProps","MessageCircleIcon","props","$","_c","t0","Symbol","for","t1","defineArrayMember","defineField","defineType","PortableTextObject","PortableTextSpan","PortableTextTextBlock","CalloutVariant","CalloutPreview","CodeDecorator","ParagraphStyle","MessageCircleIcon","createSanityIcon","linkAnnotation","SanityKeyedArray","Strict","SanityHandbookCallout","_type","calloutTypeName","variant","body","calloutType","name","type","title","icon","description","components","preview","select","prepare","selection","fields","initialValue","validation","rule","required","options","list","value","layout","direction","of","styles","component","lists","marks","decorators","annotations","Card","CardProps","Code","CodeContentProps","code","language","CodeContent","t0","$","_c","props","style","t1","overflowX","t2","t3","Nullable","isDefined","value","T","undefined","trim","Array","isArray","some","element","prototype","Reflect","getPrototypeOf","Object","keys","length","convertCase","format","words","replaceAll","toLowerCase","_match","character","toUpperCase","PreviewProps","CodeContent","isDefined","CodePreviewProps","code","language","CodePreview","t0","$","_c","t1","ComponentProps","CodeIconProps","CodeIcon","props","$","_c","t0","t1","Symbol","for","t2","defineField","defineType","PortableTextObject","CodePreview","CodeIcon","createSanityIcon","Strict","SanityHandbookCode","_type","codeTypeName","code","language","codeType","name","type","title","icon","description","components","preview","select","fields","options","list","value","ComponentProps","HorizontalRuleContentProps","HorizontalRuleContent","t0","$","_c","props","style","t1","border","borderTop","t2","PreviewProps","HorizontalRuleContent","HorizontalRulePreviewProps","HorizontalRulePreview","_props","$","_c","t0","Symbol","for","marginBlock","ComponentProps","SeparatorHorizontalIconProps","SeparatorHorizontalIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","defineField","defineType","PortableTextObject","HorizontalRulePreview","SeparatorHorizontalIcon","createSanityIcon","Strict","SanityHandbookHorizontalRule","_type","horizontalRuleTypeName","horizontalRuleType","name","type","title","icon","description","components","preview","prepare","fields","hidden","Text","ComponentProps","CaptionProps","children","Caption","t0","$","_c","props","style","t1","marginBlockStart","t2","Symbol","for","fontStyle","t3","t4","ComponentProps","Caption","isDefined","ImageContentProps","url","alt","caption","ImageContent","t0","$","_c","props","t1","t2","Symbol","for","display","maxWidth","borderRadius","t3","t4","t5","PreviewProps","ImageContent","isDefined","ImagePreviewProps","url","alt","caption","ImagePreview","t0","$","_c","t1","Symbol","for","padding","t2","ComponentProps","ImageIconProps","ImageIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","defineField","defineType","PortableTextObject","ImagePreview","ImageIcon","createSanityIcon","Strict","SanityHandbookImage","_type","imageTypeName","asset","url","caption","alt","imageType","name","type","title","icon","description","components","preview","select","fields","options","hotspot","ComponentProps","Caption","isDefined","VideoContentProps","url","caption","VideoContent","t0","$","_c","props","t1","Symbol","for","display","maxWidth","borderRadius","WebkitTransform","t2","t3","t4","t5","t6","PreviewProps","VideoContent","isDefined","VideoPreviewProps","url","caption","VideoPreview","t0","$","_c","t1","Symbol","for","padding","t2","ComponentProps","FilmIconProps","FilmIcon","props","$","_c","t0","t1","t2","t3","t4","t5","t6","t7","Symbol","for","t8","defineField","defineType","PortableTextObject","VideoPreview","FilmIcon","createSanityIcon","Strict","SanityHandbookVideo","_type","videoTypeName","asset","url","caption","videoType","name","type","title","icon","description","components","preview","select","fields","options","accept","defineArrayMember","defineField","CodeDecorator","ListItemStyle","BlockquoteStyle","HeadingStyle","ParagraphStyle","SanityHandbookBlockDefinition","linkAnnotation","calloutTypeName","codeTypeName","horizontalRuleTypeName","imageTypeName","videoTypeName","SanityHandbookGuide","createGuideContentField","customBlocks","name","type","description","of","styles","title","value","component","lists","marks","decorators","annotations","map","block","schema","defineField","defineType","PortableTextBlock","SanityDocument","defaultDocumentTitle","BookOpenTextIcon","createSanityIcon","SanityHandbookBlockDefinition","createGuideContentField","SanityKeyedArray","Strict","SanityHandbookGuide","_type","guideTypeName","title","description","content","createGuideType","customBlocks","name","type","icon","preview","select","prepare","selection","subtitle","fields","validation","rule","required","ComponentProps","BookTextIconProps","BookTextIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","ComponentProps","ListPlusIconProps","ListPlusIcon","props","$","_c","t0","t1","t2","t3","t4","Symbol","for","t5","defineArrayMember","defineField","defineType","SanityDocument","BookTextIcon","ListPlusIcon","createSanityIcon","isDefined","SanityHandbookGuide","guideTypeName","SanityKeyedArray","Strict","SanityHandbookGuideGroup","title","guides","SanityHandbook","_type","handbookTypeName","groups","handbookType","name","type","icon","description","preview","prepare","fields","of","validation","rule","required","to","select","guide0","guide1","guide2","selection","all","filter","guide","shown","slice","hasMore","formatSubtitle","join","subtitle","guideTypeName","handbookTypeName","singletonTypes","Set","documentTypes","sidebarWidth","sidebarMinimumWidth","sidebarMaximumWidth","contentMinimumWidth","contentFlex","collapsedPaneWidth","sidebarItemHeight","toolMinimumWidth","contentWidth","contentPaddingInline","contentPaddingBlockStart","contentPaddingBlockEnd","contentSpacing","section","paragraph","heading","media","callout","blockquote","list","nestedList","rule","imageTypeName","videoTypeName","assetUrlFragment","guideContentFragment","guideFragment","SanityClient","TypedQuery","__result","T","defineTypedQuery","query","fetchQuery","client","fetch","undefined","guideFragment","defineTypedQuery","SanityHandbookGuide","guideTypeName","SanityHandbook","handbookTypeName","handbookQuery","handbookDocumentsQuery","useEffect","useState","useClient","handbookDocumentsQuery","handbookQuery","fetchQuery","SanityHandbook","useHandbookDocument","$","_c","t0","Symbol","for","apiVersion","client","handbook","setHandbook","undefined","loading","setLoading","t1","t2","fetchHandbook","subscription","listen","subscribe","unsubscribe","t3","createContext","useContext","useState","ReactNode","useHandbookDocument","isDefined","SanityHandbookBlockDefinition","SanityHandbookDocumentRole","SanityHandbook","HandbookProviderConfig","sidebarTitle","roles","blocks","undocumentedFieldMessage","HandbookContextValues","activeTab","sidebarExpanded","loading","handbook","setActiveTab","id","setSidebarExpanded","expanded","HandbookProviderProps","children","HandbookContext","undefined","useHandbookContext","handbookContext","Error","HandbookProvider","t0","$","_c","t1","t2","Box","Card","Flex","Layer","LayerProvider","Text","useElementSize","useTheme_v2","useContext","ComponentProps","ReactNode","PaneContext","collapsedPaneWidth","isDefined","PaneHeaderProps","title","backButton","PaneHeader","t0","$","_c","props","style","color","pane","paneSize","rootElement","collapsed","isLast","paneHeight","border","height","collapsedWidth","window","innerHeight","bg","fg","selectable","default","enabled","t1","handleTitleClick","collapse","t2","handleLayoutClick","expand","t3","undefined","t4","lineHeight","position","top","t5","t6","t7","t8","width","transform","transformOrigin","t9","t10","t11","t12","backgroundColor","minWidth","t13","cursor","outline","t14","t15","t16","t17","t18","t19","ArrowLeftIcon","Box","Button","Heading","Stack","Text","useContext","ComponentProps","ReactNode","PaneLayoutContext","PaneContent","PaneHeader","contentPaddingBlockEnd","contentPaddingBlockStart","contentPaddingInline","contentWidth","useHandbookContext","isDefined","ContentPanelProps","Omit","id","title","description","children","ContentPanel","t0","$","_c","props","setSidebarExpanded","paneLayout","t1","collapsed","t2","t3","t4","Symbol","for","maxWidth","boxSizing","marginInline","paddingInline","paddingBlockStart","paddingBlockEnd","t5","t6","t7","t8","t9","t10","Box","Stack","Text","useClickOutsideEvent","Popover","useRef","ComponentProps","ReactNode","FieldHintProps","Omit","label","icon","open","children","onOpen","onClose","FieldHint","t0","$","_c","props","buttonReference","popoverReference","t1","Symbol","for","current","undefined","t2","maxWidth","t3","t4","t5","t6","t7","event","pointerType","t8","event_0","t9","display","alignItems","padding","fontSize","color","background","border","cursor","t10","t11","ComponentProps","ComponentType","InfoIcon","LightbulbIcon","TriangleAlertIcon","SanityHandbookMetadata","HintKind","name","Pick","label","icon","hintKinds","Flex","FlexProps","useState","FieldHint","defaultIconProps","hintKinds","isDefined","SanityHandbookMetadata","FieldHintsProps","Pick","FieldHints","t0","$","_c","caution","info","props","tip","openHint","setOpenHint","undefined","T0","t1","t2","t3","t4","hints","t5","Symbol","for","closeHint","flatMap","t6","name","label","icon","Icon","hint","ComponentProps","ComponentType","ReactNode","createSanityIcon","convertCase","resolveTitle","type","name","title","handbook","resolveDescription","description","undefined","resolveIcon","icon","FieldDefinition","Schema","isDefined","CompiledField","name","type","title","description","fields","of","handbook","NormalisedField","opaqueTypes","Set","inheritedFieldNames","Partial","Record","block","file","geopoint","image","slug","isCompiledField","value","hasFieldsArray","Array","isArray","hasOfArray","getTypeName","undefined","getParentTypeName","resolvedType","String","normaliseField","field","visited","typeName","result","has","shouldTrack","next","fieldSource","ofSource","map","subfield","member","resolveCustomFields","parentName","inherited","customFields","filter","resolveNormalisedFields","items","normalised","item","resolveNormalisedMembers","members","resolveParentName","schema","direct","get","resolveFields","length","memberType","getSubfields","directFields","ChevronDownIcon","ChevronRightIcon","Box","Card","Flex","Stack","Text","StackProps","useState","FieldDefinition","useSchema","FieldHints","useHandbookContext","resolveDescription","resolveTitle","NormalisedField","getSubfields","convertCase","isDefined","FieldProps","field","ancestors","Set","noAncestors","Field","t0","$","_c","props","t1","undefined","schema","undocumentedFieldMessage","expanded","setExpanded","t2","effectiveTitle","t3","effectiveDescription","caution","example","info","t4","tip","handbook","hasHints","t5","type","has","isCycle","t6","subfields","hasSubfields","t7","t8","Symbol","for","marginTop","t9","t10","t11","t12","t13","t14","fontStyle","t15","t16","textAlign","border","cursor","length","marginBottom","paddingLeft","borderLeft","map","subfield","name","Field","contentSpacing","resolveDescription","resolveIcon","resolveTitle","SanityHandbookDocumentRole","documentTypesSections","roles","map","title","documents","entries","document","id","name","description","icon","render","display","flexDirection","gap","section","fields","field","ComponentProps","LayoutGridIconProps","LayoutGridIcon","props","$","_c","t0","t1","t2","t3","Symbol","for","t4","ChevronRightIcon","Box","Card","Flex","Stack","Text","contentSpacing","useHandbookContext","resolveDescription","resolveIcon","resolveTitle","isDefined","DocumentTypesOverview","$","_c","roles","setActiveTab","setSidebarExpanded","t0","Symbol","for","display","flexDirection","gap","section","t1","t2","role","title","description","documents","map","document","Icon","documentDescription","name","width","marginLeft","textAlign","border","cursor","alignItems","justifyContent","height","color","opacity","Flex","Stack","Text","defaultIconProps","hintKinds","contentSpacing","hintDescriptions","tip","info","caution","Record","HowToUse","$","_c","t0","Symbol","for","display","flexDirection","gap","section","t1","t2","t3","t4","t5","map","_temp","t6","t7","name","icon","Icon","alignItems","flexShrink","fontSize","color","BookTextIcon","LayoutGridIcon","createSanityIcon","DocumentTypesOverview","HowToUse","gettingStartedSections","title","entries","id","description","icon","render","ComponentProps","PortableLinkProps","PortableLink","t0","$","_c","children","props","style","t1","color","t2","PortableText","PortableTextComponents","PortableTextMarkComponentProps","ComponentProps","CalloutContent","PortableCode","PortableLink","contentSpacing","SanityHandbookLink","SanityHandbookCallout","CalloutBlockProps","Omit","value","components","block","normal","children","marks","code","link","href","CalloutBlock","t0","$","_c","props","style","t1","marginBlock","callout","t2","body","t3","variant","ComponentProps","CodeContent","contentSpacing","isDefined","SanityHandbookCode","CodeBlockProps","Omit","value","CodeBlock","t0","$","_c","props","style","code","t1","marginBlock","media","t2","language","ComponentProps","HorizontalRuleContent","contentSpacing","SanityHandbookHorizontalRule","HorizontalRuleBlockProps","value","HorizontalRuleBlock","t0","$","_c","props","style","_value","t1","t2","marginBlock","rule","ComponentProps","ImageContent","contentSpacing","isDefined","SanityHandbookImage","ImageBlockProps","Omit","value","ImageBlock","t0","$","_c","props","style","asset","url","t1","marginBlock","media","t2","alt","caption","ComponentProps","VideoContent","contentSpacing","isDefined","SanityHandbookVideo","VideoBlockProps","Omit","value","VideoBlock","t0","$","_c","props","style","asset","url","t1","marginBlock","media","t2","caption","CSSProperties","ComponentProps","PortableListProps","Omit","ordered","PortableList","t0","$","_c","props","style","t1","undefined","t2","display","flexDirection","gap","margin","paddingLeft","listStyle","t3","PortableText","PortableTextReact","PortableTextComponentProps","PortableTextComponents","PortableTextMarkComponentProps","PortableTextTypeComponent","PortableTextTypeComponentProps","ComponentProps","ComponentType","PortableTextBlock","PortableTextListBlock","PortableTextObject","CalloutBlock","CodeBlock","HorizontalRuleBlock","ImageBlock","VideoBlock","PortableBlockquote","PortableCode","PortableHeading","PortableLink","PortableList","PortableParagraph","contentSpacing","useHandbookContext","SanityHandbookLink","calloutTypeName","codeTypeName","horizontalRuleTypeName","imageTypeName","videoTypeName","SanityKeyedArray","listSpacing","level","nestedList","list","components","block","h2","children","marginBlockStart","heading","marginBlockEnd","normal","marginBlock","paragraph","blockquote","bullet","value","number","marks","code","link","href","blockRenderer","Component","Value","Block","PortableTextProps","t0","$","_c","props","blocks","t1","Symbol","for","t2","t3","t4","t5","types","schema","name","component","t6","t7","t8","PortableText","BookOpenTextIcon","createSanityIcon","SanityHandbook","guidesSections","handbook","groups","map","title","guides","entries","guide","id","_key","description","icon","render","content","ComponentType","ReactNode","useHandbookContext","isDefined","documentTypesSections","gettingStartedSections","guidesSections","Entry","id","title","description","icon","render","Section","entries","useSections","$","_c","roles","handbook","loading","t0","ComponentProps","Pane","ContentPanel","contentFlex","contentMinimumWidth","useHandbookContext","useSections","isDefined","ContentProps","Omit","Content","props","$","_c","activeTab","sections","T0","t0","t1","t2","t3","t4","t5","t6","id","entry","flatMap","_temp","find","title","description","render","section","entries","Box","Card","Text","ComponentProps","SidebarHeadingProps","title","SidebarHeading","t0","$","_c","props","t1","Symbol","for","cursor","outline","t2","t3","ChevronRightIcon","Box","Text","CSSProperties","ComponentProps","ComponentType","PreviewCard","SanityDefaultPreview","useHandbookContext","SidebarTabProps","Omit","id","label","icon","style","SidebarTab","t0","$","_c","Icon","props","activeTab","setActiveTab","setSidebarExpanded","selected","t1","t2","cursor","t3","t4","Symbol","for","opacity","t5","t6","t7","ComponentProps","ComponentType","CommandList","Pane","PaneContent","PaneHeader","SidebarHeading","SidebarTab","sidebarItemHeight","sidebarMaximumWidth","sidebarMinimumWidth","sidebarWidth","useHandbookContext","useSections","SidebarHeadingItem","type","title","SidebarTabItem","id","label","icon","SidebarItem","SidebarProps","Omit","Sidebar","props","$","_c","sidebarTitle","sections","t0","flatMap","_temp2","items","t1","getItemDisabled","virtualIndex","t2","t3","_temp3","t4","item","entries","map","_temp","entry","useContext","PaneLayoutContext","useHandbookContext","Content","Sidebar","isDefined","Panes","$","_c","activeTab","sidebarExpanded","paneLayout","t0","hasContent","collapsed","t1","Symbol","for","t2","t3","useTheme_v2","useState","Tool","PaneLayout","toolMinimumWidth","HandbookProvider","HandbookProviderConfig","Panes","isDefined","HandbookToolProps","tool","HandbookTool","t0","$","_c","t1","options","media","layoutCollapsed","setLayoutCollapsed","t2","Symbol","for","handleCollapse","t3","handleExpand","t4","undefined","t5","t6","minHeight","minWidth","t7","t8","isDefined","configuredEditors","undefined","setConfiguredEditors","editors","isPermittedEditor","email","permitted","includes","ComponentType","definePlugin","DocumentDefinition","PortableTextObject","SchemaTypeDefinition","defaultTitle","defaultUndocumentedFieldMessage","documentTypes","singletonTypes","HandbookProviderConfig","BookTextIcon","HandbookTool","isPermittedEditor","setConfiguredEditors","createSanityIcon","calloutType","codeType","horizontalRuleType","imageType","videoType","createGuideType","handbookType","FieldDefinitionBase","handbook","SanityHandbookMetadata","title","description","example","tip","info","caution","SanityHandbookDocumentRole","documents","SanityHandbookBlockDefinition","schema","component","value","SanityHandbookConfig","sidebarTitle","roles","blocks","editors","undocumentedFieldMessage","handbookPlugin","config","resolved","guideType","name","types","map","block","document","newDocumentOptions","templateItems","creationContext","currentUser","type","hiddenTypes","email","filter","templateId","some","startsWith","actions","actionComponents","schemaType","has","action","includes","tools","icon","options","CurrentUser","StructureBuilder","BookOpenTextIcon","BookTextIcon","isPermittedEditor","createSanityIcon","guideTypeName","handbookTypeName","handbookStructure","structureBuilder","context","currentUser","editors","email","listItem","document","documentTypeList","title","icon","child","id","schemaType","useCurrentUser","isPermittedEditor","useIsHandbookEditor","editors","$","_c","user","t0","email","t1"],"sources":["../src/config/defaults.ts","../src/icons/book-open-text.tsx","../src/lib/icons.ts","../src/components/content/portable/code.tsx","../src/components/decorators.tsx","../src/components/lists.tsx","../src/components/content/portable/blockquote.tsx","../src/components/content/portable/heading.tsx","../src/components/content/portable/paragraph.tsx","../src/components/styles.tsx","../src/schemas/annotations/link.ts","../src/icons/info.tsx","../src/icons/lightbulb.tsx","../src/icons/triangle-alert.tsx","../src/blocks/callout/content.tsx","../src/blocks/callout/preview.tsx","../src/icons/message-circle.tsx","../src/schemas/blocks/callout.ts","../src/blocks/code/content.tsx","../src/lib/utils.ts","../src/blocks/code/preview.tsx","../src/icons/code.tsx","../src/schemas/blocks/code.ts","../src/blocks/horizontal-rule/content.tsx","../src/blocks/horizontal-rule/preview.tsx","../src/icons/separator-horizontal.tsx","../src/schemas/blocks/horizontal-rule.ts","../src/components/caption.tsx","../src/blocks/image/content.tsx","../src/blocks/image/preview.tsx","../src/icons/image.tsx","../src/schemas/blocks/image.ts","../src/blocks/video/content.tsx","../src/blocks/video/preview.tsx","../src/icons/film.tsx","../src/schemas/blocks/video.ts","../src/schemas/fields/content.ts","../src/schemas/types/guide.ts","../src/icons/book-text.tsx","../src/icons/list-plus.tsx","../src/schemas/types/handbook.ts","../src/config/documents.ts","../src/config/layout.ts","../src/groq/fragments.ts","../src/lib/groq.ts","../src/groq/documents.ts","../src/hooks/use-handbook-document.ts","../src/contexts/handbook.tsx","../src/components/pane-header.tsx","../src/components/content-panel.tsx","../src/components/field/hint.tsx","../src/config/hints.ts","../src/components/field/hints.tsx","../src/lib/display.ts","../src/lib/schema.ts","../src/components/field/field.tsx","../src/sections/document-types.tsx","../src/icons/layout-grid.tsx","../src/pages/document-types-overview.tsx","../src/pages/how-to-use.tsx","../src/sections/getting-started.tsx","../src/components/content/portable/link.tsx","../src/blocks/callout/block.tsx","../src/blocks/code/block.tsx","../src/blocks/horizontal-rule/block.tsx","../src/blocks/image/block.tsx","../src/blocks/video/block.tsx","../src/components/content/portable/list.tsx","../src/components/content/portable-text.tsx","../src/sections/guides.tsx","../src/hooks/use-sections.ts","../src/layouts/content.tsx","../src/components/sidebar/heading.tsx","../src/components/sidebar/tab.tsx","../src/layouts/sidebar.tsx","../src/layouts/panes.tsx","../src/layouts/tool.tsx","../src/lib/editors.ts","../src/plugin.ts","../src/lib/structure.ts","../src/hooks/use-is-handbook-editor.ts"],"sourcesContent":["import type { ComponentProps } from \"react\";\n\n/** Title shown in the Studio tool navigation and at the top of the sidebar. */\nexport const defaultTitle = \"Handbook\";\n\n/** Fallback title displayed wherever a document has no title of its own. */\nexport const defaultDocumentTitle = \"Untitled\";\n\n/** Fallback message shown when a field has no description. */\nexport const defaultUndocumentedFieldMessage =\n \"This field has not been documented yet. Contact your development team for guidance.\";\n\n/** Properties every icon the plugin draws is rendered with. */\nexport const defaultIconProps: ComponentProps<\"svg\"> = { width: \"1em\", height: \"1em\", strokeWidth: 1.5 };\n","import type { ComponentProps } from \"react\";\n\nexport type BookOpenTextIconProps = ComponentProps<\"svg\">;\n\nexport function BookOpenTextIcon(props: BookOpenTextIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 7v14\" />\n <path d=\"M16 12h2\" />\n <path d=\"M16 8h2\" />\n <path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\" />\n <path d=\"M6 12h2\" />\n <path d=\"M6 8h2\" />\n </svg>\n );\n}\n","import type { ComponentProps, ComponentType } from \"react\";\nimport { createElement } from \"react\";\n\nimport { defaultIconProps } from \"@/config/defaults\";\n\n/**\n * Creates a Sanity Studio icon component from an SVG icon.\n *\n * @param icon - The icon component to wrap.\n * @param props - Additional props merged over the default properties a Studio icon is drawn with.\n * @returns A Studio icon component.\n */\nexport function createSanityIcon(icon: ComponentType<ComponentProps<\"svg\">>, props?: ComponentProps<\"svg\">) {\n const Icon = icon;\n\n function SanityIcon() {\n return createElement(Icon, { ...defaultIconProps, ...props });\n }\n\n return SanityIcon;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type PortableCodeProps = ComponentProps<\"code\">;\n\nexport function PortableCode({ style, ...props }: PortableCodeProps) {\n return (\n <code\n style={{\n paddingBlock: 2,\n paddingInline: 4,\n fontSize: \"0.875em\",\n backgroundColor: \"var(--card-code-bg-color)\",\n borderRadius: 2,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import type { BlockDecoratorProps } from \"sanity\";\n\nimport { PortableCode } from \"@/components/content/portable/code\";\n\nexport function CodeDecorator({ children }: BlockDecoratorProps) {\n return <PortableCode>{children}</PortableCode>;\n}\n","import { Text } from \"@sanity/ui\";\nimport type { BlockListItemProps } from \"sanity\";\n\nexport function ListItemStyle({ children }: BlockListItemProps) {\n return (\n <Text size={1} style={{ marginTop: \"0.375em\" }}>\n {children}\n </Text>\n );\n}\n","import { Box, Text } from \"@sanity/ui\";\nimport type { BoxProps } from \"@sanity/ui\";\n\nexport type PortableBlockquoteProps = BoxProps & {\n muted?: boolean;\n};\n\nexport function PortableBlockquote({ muted, children, style, ...props }: PortableBlockquoteProps) {\n return (\n <Box paddingY={1} paddingLeft={3} style={{ borderLeft: \"2px solid var(--card-border-color)\", ...style }} {...props}>\n <Text size={1} muted={muted} style={{ fontStyle: \"italic\" }}>\n {children}\n </Text>\n </Box>\n );\n}\n","import { Text } from \"@sanity/ui\";\nimport type { TextProps } from \"@sanity/ui\";\n\nexport type PortableHeadingProps = Omit<TextProps, \"as\">;\n\nexport function PortableHeading(props: PortableHeadingProps) {\n return <Text as=\"h2\" size={1} weight=\"medium\" {...props} />;\n}\n","import { Text } from \"@sanity/ui\";\nimport type { TextProps } from \"@sanity/ui\";\n\nexport type PortableParagraphProps = TextProps;\n\nexport function PortableParagraph(props: PortableParagraphProps) {\n return <Text size={1} {...props} />;\n}\n","import type { BlockStyleProps } from \"sanity\";\n\nimport { PortableBlockquote } from \"@/components/content/portable/blockquote\";\nimport { PortableHeading } from \"@/components/content/portable/heading\";\nimport { PortableParagraph } from \"@/components/content/portable/paragraph\";\n\nexport function ParagraphStyle({ children }: BlockStyleProps) {\n return <PortableParagraph>{children}</PortableParagraph>;\n}\n\nexport function HeadingStyle({ children }: BlockStyleProps) {\n return <PortableHeading>{children}</PortableHeading>;\n}\n\nexport function BlockquoteStyle({ children }: BlockStyleProps) {\n return <PortableBlockquote>{children}</PortableBlockquote>;\n}\n","import { defineArrayMember, defineField } from \"sanity\";\nimport type { PortableTextObject } from \"sanity\";\n\nimport type { Strict } from \"@/types\";\n\n/**\n * A web address applied to a run of guide text.\n *\n * @public\n */\nexport type SanityHandbookLink = Strict<PortableTextObject> & {\n _type: \"link\";\n /** Web address the link points to. */\n href?: string;\n};\n\nexport const linkAnnotation = defineArrayMember({\n name: \"link\" satisfies SanityHandbookLink[\"_type\"],\n type: \"object\",\n description: \"Link applied to the selected text.\",\n preview: {\n select: {\n href: \"href\",\n },\n prepare(selection: { href?: string }) {\n const { href } = selection;\n\n return {\n title: href ?? \"Link\",\n };\n },\n },\n fields: [\n defineField({\n name: \"href\" satisfies keyof SanityHandbookLink,\n title: \"URL\",\n type: \"url\",\n description: \"Web address destination for this link. Supports http, https, mailto, and tel schemes.\",\n validation: (rule) => rule.uri({ scheme: [\"http\", \"https\", \"mailto\", \"tel\"] }),\n }),\n ],\n});\n","import type { ComponentProps } from \"react\";\n\nexport type InfoIconProps = ComponentProps<\"svg\">;\n\nexport function InfoIcon(props: InfoIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type LightbulbIconProps = ComponentProps<\"svg\">;\n\nexport function LightbulbIcon(props: LightbulbIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\" />\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n </svg>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type TriangleAlertIconProps = ComponentProps<\"svg\">;\n\nexport function TriangleAlertIcon(props: TriangleAlertIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n","import { Card, Flex, Text } from \"@sanity/ui\";\nimport type { CardProps, CardTone } from \"@sanity/ui\";\nimport type { ComponentProps, ComponentType, ReactNode } from \"react\";\n\nimport { defaultIconProps } from \"@/config/defaults\";\nimport { InfoIcon } from \"@/icons/info\";\nimport { LightbulbIcon } from \"@/icons/lightbulb\";\nimport { TriangleAlertIcon } from \"@/icons/triangle-alert\";\n\n/** The intent a callout is drawn with, choosing its icon and tone. */\nexport type CalloutVariant = \"tip\" | \"info\" | \"warning\";\n\n/** How a callout variant is presented, pairing its icon with the tone the card is drawn in. */\ninterface CalloutVariantStyle {\n /** Icon identifying the variant. */\n icon: ComponentType<ComponentProps<\"svg\">>;\n /** Card tone carrying the variant's intent. */\n tone: CardTone;\n}\n\nexport type CalloutContentProps = Omit<CardProps, \"tone\"> & {\n variant: CalloutVariant;\n children: ReactNode;\n};\n\n/** Presentation for each callout variant. */\nconst presentation: Record<CalloutVariant, CalloutVariantStyle> = {\n tip: { icon: LightbulbIcon, tone: \"positive\" },\n info: { icon: InfoIcon, tone: \"primary\" },\n warning: { icon: TriangleAlertIcon, tone: \"caution\" },\n};\n\nexport function CalloutContent({ variant, children, ...props }: CalloutContentProps) {\n const { icon: Icon, tone } = presentation[variant];\n\n return (\n <Card padding={4} radius={2} tone={tone} {...props}>\n <Flex align=\"flex-start\" gap={3}>\n <div style={{ flexShrink: 0, marginTop: \"-2px\", fontSize: \"16px\", color: \"var(--card-icon-color)\" }}>\n <Icon {...defaultIconProps} />\n </div>\n <Text size={1} style={{ color: \"var(--card-icon-color)\" }}>\n {children}\n </Text>\n </Flex>\n </Card>\n );\n}\n","import type { PreviewProps } from \"sanity\";\n\nimport { CalloutContent } from \"@/blocks/callout/content\";\nimport type { CalloutVariant } from \"@/blocks/callout/content\";\nimport type { SanityHandbookCallout } from \"@/schemas/blocks/callout\";\n\nexport type CalloutPreviewProps = PreviewProps & {\n variant?: CalloutVariant;\n body?: SanityHandbookCallout[\"body\"];\n};\n\nexport function CalloutPreview({ variant, body }: CalloutPreviewProps) {\n return (\n <CalloutContent variant={variant ?? \"tip\"}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {body?.map(({ _key, children }) => (\n <div key={_key} style={{ whiteSpace: \"pre-wrap\" }}>\n {children.map((child) => child.text).join(\"\")}\n </div>\n ))}\n </div>\n </CalloutContent>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type MessageCircleIconProps = ComponentProps<\"svg\">;\n\nexport function MessageCircleIcon(props: MessageCircleIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\" />\n </svg>\n );\n}\n","import { defineArrayMember, defineField, defineType } from \"sanity\";\nimport type { PortableTextObject, PortableTextSpan, PortableTextTextBlock } from \"sanity\";\n\nimport type { CalloutVariant } from \"@/blocks/callout/content\";\nimport { CalloutPreview } from \"@/blocks/callout/preview\";\nimport { CodeDecorator } from \"@/components/decorators\";\nimport { ParagraphStyle } from \"@/components/styles\";\nimport { MessageCircleIcon } from \"@/icons/message-circle\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport { linkAnnotation } from \"@/schemas/annotations/link\";\nimport type { SanityKeyedArray, Strict } from \"@/types\";\n\n/**\n * A highlighted message set apart from the surrounding guide text.\n *\n * @public\n */\nexport type SanityHandbookCallout = Strict<PortableTextObject> & {\n _type: typeof calloutTypeName;\n /** Visual style and intent of the callout. */\n variant: CalloutVariant;\n /** Portable Text content displayed inside the callout, which offers no inline objects. */\n body: SanityKeyedArray<PortableTextTextBlock<PortableTextSpan>>;\n};\n\n/** Type name of the callout block. */\nexport const calloutTypeName = \"handbook.callout\";\n\nexport const calloutType = defineType({\n name: calloutTypeName satisfies SanityHandbookCallout[\"_type\"],\n type: \"object\",\n title: \"Callout\",\n icon: createSanityIcon(MessageCircleIcon),\n description: \"Highlighted message block drawing attention to tips, supplementary information, or warnings.\",\n components: {\n preview: CalloutPreview,\n },\n preview: {\n select: {\n variant: \"variant\",\n body: \"body\",\n },\n prepare(selection: { variant?: CalloutVariant; body?: SanityHandbookCallout[\"body\"] }) {\n const { variant, body } = selection;\n\n return {\n title: \"Callout\",\n variant,\n body,\n };\n },\n },\n fields: [\n defineField({\n name: \"variant\" satisfies keyof SanityHandbookCallout,\n type: \"string\",\n description: \"Visual style and intent of the callout.\",\n initialValue: \"tip\",\n validation: (rule) => rule.required(),\n options: {\n list: [\n { title: \"Tip\", value: \"tip\" },\n { title: \"Information\", value: \"info\" },\n { title: \"Warning\", value: \"warning\" },\n ],\n layout: \"radio\",\n direction: \"horizontal\",\n },\n }),\n defineField({\n name: \"body\" satisfies keyof SanityHandbookCallout,\n type: \"array\",\n description: \"Content displayed inside the callout. Supports inline formatting and links.\",\n of: [\n defineArrayMember({\n name: \"block\",\n type: \"block\",\n styles: [{ title: \"Normal\", value: \"normal\", component: ParagraphStyle }],\n lists: [],\n marks: {\n decorators: [\n { title: \"Bold\", value: \"strong\" },\n { title: \"Italic\", value: \"em\" },\n { title: \"Strikethrough\", value: \"strike-through\" },\n { title: \"Code\", value: \"code\", component: CodeDecorator },\n ],\n annotations: [linkAnnotation],\n },\n }),\n ],\n }),\n ],\n});\n","import { Card } from \"@sanity/ui\";\nimport type { CardProps } from \"@sanity/ui\";\nimport { Code } from \"@sanity/ui/code\";\n\nexport type CodeContentProps = CardProps & {\n code: string;\n language?: string;\n};\n\nexport function CodeContent({ code, language, style, ...props }: CodeContentProps) {\n return (\n <Card padding={4} radius={2} tone=\"transparent\" style={{ overflowX: \"auto\", ...style }} {...props}>\n <Code size={1} language={language}>\n {code}\n </Code>\n </Card>\n );\n}\n","import type { Nullable } from \"@/types\";\n\n/**\n * Checks whether a value is defined and non-empty, treating `false`, empty strings, and objects with\n * no keys as absent. An array is absent unless one of its elements is itself present, while anything\n * built from a class counts as present on existence alone. Not intended for boolean flags.\n *\n * @param value - The value to check.\n * @returns True if the value is defined and not empty.\n */\nexport function isDefined<T>(value: Nullable<T> | false): value is T {\n if (value === undefined || value === null || value === false) return false;\n if (typeof value === \"string\") return value.trim() !== \"\";\n if (Array.isArray(value)) return value.some((element) => isDefined(element));\n\n if (typeof value === \"object\") {\n const prototype = Reflect.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return true;\n\n return Object.keys(value).length > 0;\n }\n\n return true;\n}\n\n/**\n * Converts a string between different casing formats.\n *\n * @param value - The string to convert.\n * @param format - The target casing format.\n * @returns The converted string.\n */\nexport function convertCase(value: string, format: \"kebab\" | \"snake\" | \"camel\" | \"pascal\" | \"title\" | \"sentence\") {\n const words = value\n .replaceAll(/(?<lower>[a-z0-9])(?<upper>[A-Z])/gu, \"$<lower> $<upper>\")\n .replaceAll(/[-_\\s]+/gu, \" \")\n .trim()\n .toLowerCase();\n\n switch (format) {\n case \"kebab\": {\n return words.replaceAll(/\\s+/gu, \"-\");\n }\n case \"snake\": {\n return words.replaceAll(/\\s+/gu, \"_\");\n }\n case \"camel\": {\n return words.replaceAll(/\\s+(?<character>.)/gu, (_match, character: string) => character.toUpperCase());\n }\n case \"pascal\": {\n return words.replaceAll(/(?:^|\\s+)(?<character>.)/gu, (_match, character: string) => character.toUpperCase());\n }\n case \"title\": {\n return words.replaceAll(/\\b\\w/gu, (character) => character.toUpperCase());\n }\n case \"sentence\": {\n return words.replaceAll(/^(?<character>.)/gu, (character) => character.toUpperCase());\n }\n default: {\n return value;\n }\n }\n}\n","import type { PreviewProps } from \"sanity\";\n\nimport { CodeContent } from \"@/blocks/code/content\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type CodePreviewProps = PreviewProps & {\n code?: string;\n language?: string;\n};\n\nexport function CodePreview({ code, language }: CodePreviewProps) {\n if (!isDefined(code)) return null;\n\n return <CodeContent code={code} language={language} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type CodeIconProps = ComponentProps<\"svg\">;\n\nexport function CodeIcon(props: CodeIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m16 18 6-6-6-6\" />\n <path d=\"m8 6-6 6 6 6\" />\n </svg>\n );\n}\n","import { defineField, defineType } from \"sanity\";\nimport type { PortableTextObject } from \"sanity\";\n\nimport { CodePreview } from \"@/blocks/code/preview\";\nimport { CodeIcon } from \"@/icons/code\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport type { Strict } from \"@/types\";\n\n/**\n * A block of source code, rendered with syntax highlighting for its language.\n *\n * @public\n */\nexport type SanityHandbookCode = Strict<PortableTextObject> & {\n _type: typeof codeTypeName;\n /** Source code to display. */\n code?: string;\n /** Programming language used for syntax highlighting. */\n language?: string;\n};\n\n/** Type name of the code block. */\nexport const codeTypeName = \"handbook.code\";\n\nexport const codeType = defineType({\n name: codeTypeName satisfies SanityHandbookCode[\"_type\"],\n type: \"object\",\n title: \"Code\",\n icon: createSanityIcon(CodeIcon),\n description: \"Syntax-highlighted code block with language selection.\",\n components: {\n preview: CodePreview,\n },\n preview: {\n select: {\n code: \"code\",\n language: \"language\",\n },\n },\n fields: [\n defineField({\n name: \"code\" satisfies keyof SanityHandbookCode,\n type: \"text\",\n description: \"The source code to display.\",\n }),\n defineField({\n name: \"language\" satisfies keyof SanityHandbookCode,\n type: \"string\",\n description: \"Programming language used for syntax highlighting.\",\n options: {\n list: [\n { title: \"CSS\", value: \"css\" },\n { title: \"GROQ\", value: \"groq\" },\n { title: \"HTML\", value: \"html\" },\n { title: \"JavaScript\", value: \"javascript\" },\n { title: \"JSON\", value: \"json\" },\n { title: \"Plain Text\", value: \"text\" },\n { title: \"React\", value: \"tsx\" },\n { title: \"Shell\", value: \"shell\" },\n { title: \"TypeScript\", value: \"typescript\" },\n ],\n },\n }),\n ],\n});\n","import type { ComponentProps } from \"react\";\n\nexport type HorizontalRuleContentProps = ComponentProps<\"hr\">;\n\nexport function HorizontalRuleContent({ style, ...props }: HorizontalRuleContentProps) {\n return <hr style={{ border: \"none\", borderTop: \"1px solid var(--card-border-color)\", ...style }} {...props} />;\n}\n","import type { PreviewProps } from \"sanity\";\n\nimport { HorizontalRuleContent } from \"@/blocks/horizontal-rule/content\";\n\nexport type HorizontalRulePreviewProps = PreviewProps;\n\nexport function HorizontalRulePreview(_props: HorizontalRulePreviewProps) {\n return <HorizontalRuleContent style={{ marginBlock: 8 }} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type SeparatorHorizontalIconProps = ComponentProps<\"svg\">;\n\nexport function SeparatorHorizontalIcon(props: SeparatorHorizontalIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m16 16-4 4-4-4\" />\n <path d=\"M3 12h18\" />\n <path d=\"m8 8 4-4 4 4\" />\n </svg>\n );\n}\n","import { defineField, defineType } from \"sanity\";\nimport type { PortableTextObject } from \"sanity\";\n\nimport { HorizontalRulePreview } from \"@/blocks/horizontal-rule/preview\";\nimport { SeparatorHorizontalIcon } from \"@/icons/separator-horizontal\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport type { Strict } from \"@/types\";\n\n/**\n * A divider between sections of a guide, carrying no authored content of its own.\n *\n * @public\n */\nexport type SanityHandbookHorizontalRule = Strict<PortableTextObject> & {\n _type: typeof horizontalRuleTypeName;\n};\n\n/** Type name of the horizontal rule block. */\nexport const horizontalRuleTypeName = \"handbook.horizontalRule\";\n\nexport const horizontalRuleType = defineType({\n name: horizontalRuleTypeName satisfies SanityHandbookHorizontalRule[\"_type\"],\n type: \"object\",\n title: \"Horizontal Rule\",\n icon: createSanityIcon(SeparatorHorizontalIcon),\n description: \"Visual divider between sections of content.\",\n components: {\n preview: HorizontalRulePreview,\n },\n preview: {\n prepare() {\n return {\n title: \"Horizontal Rule\",\n };\n },\n },\n fields: [\n // Sanity rejects an object type declaring no fields, and a rule has nothing of its own to store.\n defineField({\n name: \"style\",\n type: \"string\",\n description: \"Reserved. A horizontal rule carries no authored content.\",\n hidden: true,\n }),\n ],\n});\n","import { Text } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nexport type CaptionProps = ComponentProps<\"div\"> & {\n children: string;\n};\n\nexport function Caption({ children, style, ...props }: CaptionProps) {\n return (\n <div style={{ marginBlockStart: 12, ...style }} {...props}>\n <Text size={1} muted style={{ fontStyle: \"italic\" }}>\n {children}\n </Text>\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nimport { Caption } from \"@/components/caption\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type ImageContentProps = ComponentProps<\"div\"> & {\n url: string;\n alt?: string;\n caption?: string;\n};\n\nexport function ImageContent({ url, alt, caption, ...props }: ImageContentProps) {\n return (\n <div {...props}>\n <img src={url} alt={alt ?? \"\"} style={{ display: \"block\", maxWidth: \"100%\", borderRadius: 4 }} />\n {isDefined(caption) && <Caption>{caption}</Caption>}\n </div>\n );\n}\n","import type { PreviewProps } from \"sanity\";\n\nimport { ImageContent } from \"@/blocks/image/content\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type ImagePreviewProps = PreviewProps & {\n url?: string;\n alt?: string;\n caption?: string;\n};\n\nexport function ImagePreview({ url, alt, caption }: ImagePreviewProps) {\n if (!isDefined(url)) return null;\n\n return <ImageContent url={url} alt={alt} caption={caption} style={{ padding: 8 }} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type ImageIconProps = ComponentProps<\"svg\">;\n\nexport function ImageIcon(props: ImageIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n );\n}\n","import { defineField, defineType } from \"sanity\";\nimport type { PortableTextObject } from \"sanity\";\n\nimport { ImagePreview } from \"@/blocks/image/preview\";\nimport { ImageIcon } from \"@/icons/image\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport type { Strict } from \"@/types\";\n\n/**\n * An image placed in a guide, with the caption and alternative text shown alongside it.\n *\n * @public\n */\nexport type SanityHandbookImage = Strict<PortableTextObject> & {\n _type: typeof imageTypeName;\n /** Uploaded image asset, narrowed by the query to the URL the viewer renders. */\n asset?: { url?: string };\n /** Text displayed beneath the image. */\n caption?: string;\n /** Alternative text for screen readers. */\n alt?: string;\n};\n\n/** Type name of the image block. */\nexport const imageTypeName = \"handbook.image\";\n\nexport const imageType = defineType({\n name: imageTypeName satisfies SanityHandbookImage[\"_type\"],\n type: \"object\",\n title: \"Image\",\n icon: createSanityIcon(ImageIcon),\n description: \"Image with an optional caption and alternative text.\",\n components: {\n preview: ImagePreview,\n },\n preview: {\n select: {\n caption: \"caption\",\n alt: \"alt\",\n url: \"asset.asset.url\",\n },\n },\n fields: [\n defineField({\n name: \"asset\" satisfies keyof SanityHandbookImage,\n title: \"Image\",\n type: \"image\",\n description: \"Upload or select an image from the media library.\",\n options: { hotspot: true },\n }),\n defineField({\n name: \"caption\" satisfies keyof SanityHandbookImage,\n type: \"string\",\n description: \"Caption text displayed below the image, such as a credit or a note.\",\n }),\n defineField({\n name: \"alt\" satisfies keyof SanityHandbookImage,\n title: \"Alternative Text\",\n type: \"string\",\n description: \"Describes what the image shows for people who cannot see it. Don't repeat the caption here.\",\n }),\n ],\n});\n","import type { ComponentProps } from \"react\";\n\nimport { Caption } from \"@/components/caption\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type VideoContentProps = ComponentProps<\"div\"> & {\n url: string;\n caption?: string;\n};\n\nexport function VideoContent({ url, caption, ...props }: VideoContentProps) {\n return (\n <div {...props}>\n <video\n src={url}\n controls\n style={{ display: \"block\", maxWidth: \"100%\", borderRadius: 4, WebkitTransform: \"translateZ(0)\" }}\n >\n <track kind=\"captions\" label={caption ?? \"Video\"} />\n </video>\n {isDefined(caption) && <Caption>{caption}</Caption>}\n </div>\n );\n}\n","import type { PreviewProps } from \"sanity\";\n\nimport { VideoContent } from \"@/blocks/video/content\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type VideoPreviewProps = PreviewProps & {\n url?: string;\n caption?: string;\n};\n\nexport function VideoPreview({ url, caption }: VideoPreviewProps) {\n if (!isDefined(url)) return null;\n\n return <VideoContent url={url} caption={caption} style={{ padding: 8 }} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type FilmIconProps = ComponentProps<\"svg\">;\n\nexport function FilmIcon(props: FilmIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M7 3v18\" />\n <path d=\"M3 7.5h4\" />\n <path d=\"M3 12h18\" />\n <path d=\"M3 16.5h4\" />\n <path d=\"M17 3v18\" />\n <path d=\"M17 7.5h4\" />\n <path d=\"M17 16.5h4\" />\n </svg>\n );\n}\n","import { defineField, defineType } from \"sanity\";\nimport type { PortableTextObject } from \"sanity\";\n\nimport { VideoPreview } from \"@/blocks/video/preview\";\nimport { FilmIcon } from \"@/icons/film\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport type { Strict } from \"@/types\";\n\n/**\n * A video placed in a guide, with the caption shown beneath it.\n *\n * @public\n */\nexport type SanityHandbookVideo = Strict<PortableTextObject> & {\n _type: typeof videoTypeName;\n /** Uploaded video asset, narrowed by the query to the URL the viewer renders. */\n asset?: { url?: string };\n /** Text displayed beneath the video. */\n caption?: string;\n};\n\n/** Type name of the video block. */\nexport const videoTypeName = \"handbook.video\";\n\nexport const videoType = defineType({\n name: videoTypeName satisfies SanityHandbookVideo[\"_type\"],\n type: \"object\",\n title: \"Video\",\n icon: createSanityIcon(FilmIcon),\n description: \"Video with an optional caption.\",\n components: {\n preview: VideoPreview,\n },\n preview: {\n select: {\n caption: \"caption\",\n url: \"asset.asset.url\",\n },\n },\n fields: [\n defineField({\n name: \"asset\" satisfies keyof SanityHandbookVideo,\n title: \"Video\",\n type: \"file\",\n description: \"Upload or select a video from the media library.\",\n options: { accept: \"video/*\" },\n }),\n defineField({\n name: \"caption\" satisfies keyof SanityHandbookVideo,\n type: \"string\",\n description: \"Caption text displayed below the video, such as a credit or a note.\",\n }),\n ],\n});\n","import { defineArrayMember, defineField } from \"sanity\";\n\nimport { CodeDecorator } from \"@/components/decorators\";\nimport { ListItemStyle } from \"@/components/lists\";\nimport { BlockquoteStyle, HeadingStyle, ParagraphStyle } from \"@/components/styles\";\nimport type { SanityHandbookBlockDefinition } from \"@/plugin\";\nimport { linkAnnotation } from \"@/schemas/annotations/link\";\nimport { calloutTypeName } from \"@/schemas/blocks/callout\";\nimport { codeTypeName } from \"@/schemas/blocks/code\";\nimport { horizontalRuleTypeName } from \"@/schemas/blocks/horizontal-rule\";\nimport { imageTypeName } from \"@/schemas/blocks/image\";\nimport { videoTypeName } from \"@/schemas/blocks/video\";\nimport type { SanityHandbookGuide } from \"@/schemas/types/guide\";\n\n/**\n * Creates the Portable Text content field for Handbook guides, offering the built-in blocks alongside\n * any a consumer registered.\n *\n * @param customBlocks - Custom block definitions registered by the consumer.\n * @returns A field definition for the guide content array.\n */\nexport function createGuideContentField(customBlocks: SanityHandbookBlockDefinition[] = []) {\n return defineField({\n name: \"content\" satisfies keyof SanityHandbookGuide,\n type: \"array\",\n description: \"Rich text with formatting, headings, lists, images, code blocks, and custom blocks.\",\n of: [\n defineArrayMember({\n name: \"block\",\n type: \"block\",\n styles: [\n { title: \"Paragraph\", value: \"normal\", component: ParagraphStyle },\n { title: \"Heading\", value: \"h2\", component: HeadingStyle },\n { title: \"Blockquote\", value: \"blockquote\", component: BlockquoteStyle },\n ],\n lists: [\n { title: \"Bullet\", value: \"bullet\", component: ListItemStyle },\n { title: \"Number\", value: \"number\", component: ListItemStyle },\n ],\n marks: {\n decorators: [\n { title: \"Bold\", value: \"strong\" },\n { title: \"Italic\", value: \"em\" },\n { title: \"Strikethrough\", value: \"strike-through\" },\n { title: \"Code\", value: \"code\", component: CodeDecorator },\n ],\n annotations: [linkAnnotation],\n },\n }),\n defineArrayMember({ name: imageTypeName, type: imageTypeName }),\n defineArrayMember({ name: videoTypeName, type: videoTypeName }),\n defineArrayMember({ name: codeTypeName, type: codeTypeName }),\n defineArrayMember({ name: calloutTypeName, type: calloutTypeName }),\n defineArrayMember({ name: horizontalRuleTypeName, type: horizontalRuleTypeName }),\n ...customBlocks.map((block) => defineArrayMember({ name: block.schema.name, type: block.schema.name })),\n ],\n });\n}\n","import { defineField, defineType } from \"sanity\";\nimport type { PortableTextBlock, SanityDocument } from \"sanity\";\n\nimport { defaultDocumentTitle } from \"@/config/defaults\";\nimport { BookOpenTextIcon } from \"@/icons/book-open-text\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport type { SanityHandbookBlockDefinition } from \"@/plugin\";\nimport { createGuideContentField } from \"@/schemas/fields/content\";\nimport type { SanityKeyedArray, Strict } from \"@/types\";\n\n/**\n * A single Handbook page, authored as rich text and rendered in the tool.\n *\n * @public\n */\nexport type SanityHandbookGuide = Strict<SanityDocument> & {\n _type: typeof guideTypeName;\n /** Display title for this guide. */\n title: string;\n /** Brief description shown beneath the guide heading. */\n description?: string;\n /** Portable Text content of the guide. */\n content: SanityKeyedArray<PortableTextBlock>;\n};\n\n/** Document type name of an individual guide. */\nexport const guideTypeName = \"handbook.guide\";\n\n/**\n * Creates the document type a single guide is authored as, with its content field offering the\n * built-in blocks alongside any a consumer registered.\n *\n * @param customBlocks - Custom block definitions registered by the consumer.\n * @returns A document type definition for Handbook guides.\n */\nexport function createGuideType(customBlocks: SanityHandbookBlockDefinition[] = []) {\n return defineType({\n name: guideTypeName satisfies SanityHandbookGuide[\"_type\"],\n type: \"document\",\n title: \"Handbook Guide\",\n icon: createSanityIcon(BookOpenTextIcon),\n description: \"Handbook page authored with rich text, images, and custom blocks.\",\n preview: {\n select: {\n title: \"title\",\n description: \"description\",\n },\n prepare(selection: { title?: string; description?: string }) {\n const { title, description } = selection;\n\n return {\n title: title ?? defaultDocumentTitle,\n subtitle: description,\n };\n },\n },\n fields: [\n defineField({\n name: \"title\" satisfies keyof SanityHandbookGuide,\n type: \"string\",\n description: \"Appears in the Handbook sidebar and as the guide heading.\",\n validation: (rule) => rule.required(),\n }),\n defineField({\n name: \"description\" satisfies keyof SanityHandbookGuide,\n type: \"string\",\n description: \"Short introduction text displayed below the guide heading.\",\n }),\n createGuideContentField(customBlocks),\n ],\n });\n}\n","import type { ComponentProps } from \"react\";\n\nexport type BookTextIconProps = ComponentProps<\"svg\">;\n\nexport function BookTextIcon(props: BookTextIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\" />\n <path d=\"M8 11h8\" />\n <path d=\"M8 7h6\" />\n </svg>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type ListPlusIconProps = ComponentProps<\"svg\">;\n\nexport function ListPlusIcon(props: ListPlusIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M16 5H3\" />\n <path d=\"M11 12H3\" />\n <path d=\"M16 19H3\" />\n <path d=\"M18 9v6\" />\n <path d=\"M21 12h-6\" />\n </svg>\n );\n}\n","import { defineArrayMember, defineField, defineType } from \"sanity\";\nimport type { SanityDocument } from \"sanity\";\n\nimport { BookTextIcon } from \"@/icons/book-text\";\nimport { ListPlusIcon } from \"@/icons/list-plus\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport { isDefined } from \"@/lib/utils\";\nimport type { SanityHandbookGuide } from \"@/schemas/types/guide\";\nimport { guideTypeName } from \"@/schemas/types/guide\";\nimport type { SanityKeyedArray, Strict } from \"@/types\";\n\n/**\n * A titled run of guides in the sidebar, holding them in the order they appear.\n *\n * @public\n */\nexport interface SanityHandbookGuideGroup {\n /** Display title for this group in the sidebar. */\n title: string;\n /** Ordered array of guide references. */\n guides: SanityKeyedArray<SanityHandbookGuide>;\n}\n\n/**\n * The singleton naming every guide group and the order the sidebar lists them in.\n *\n * @public\n */\nexport type SanityHandbook = Strict<SanityDocument> & {\n _type: typeof handbookTypeName;\n /** Ordered array of groups, each containing a title and guide references. */\n groups: SanityKeyedArray<SanityHandbookGuideGroup>;\n};\n\n/** Document type name of the Handbook singleton. */\nexport const handbookTypeName = \"handbook.handbook\";\n\nexport const handbookType = defineType({\n name: handbookTypeName satisfies SanityHandbook[\"_type\"],\n type: \"document\",\n title: \"Handbook\",\n icon: createSanityIcon(BookTextIcon),\n description: \"Defines the groups of guides shown in the Handbook sidebar, and the order they appear in.\",\n preview: {\n prepare() {\n return {\n title: \"Handbook\",\n };\n },\n },\n fields: [\n defineField({\n name: \"groups\" satisfies keyof SanityHandbook,\n type: \"array\",\n description:\n \"Ordered list of groups displayed in the Handbook sidebar. Each group contains a title and an ordered list of guide references.\",\n of: [\n defineArrayMember({\n name: \"group\",\n type: \"object\",\n icon: createSanityIcon(ListPlusIcon),\n description: \"Named section of the Handbook sidebar holding an ordered list of guides.\",\n fields: [\n defineField({\n name: \"title\" satisfies keyof SanityHandbookGuideGroup,\n type: \"string\",\n description: \"Heading displayed above this group of guides in the sidebar.\",\n validation: (rule) => rule.required(),\n }),\n defineField({\n name: \"guides\" satisfies keyof SanityHandbookGuideGroup,\n type: \"array\",\n description: \"Ordered list of guides within this group. Drag to reorder.\",\n of: [\n defineArrayMember({\n name: \"guide\",\n type: \"reference\",\n to: [{ type: guideTypeName }],\n }),\n ],\n }),\n ],\n preview: {\n select: {\n title: \"title\",\n guide0: \"guides.0.title\",\n guide1: \"guides.1.title\",\n guide2: \"guides.2.title\",\n },\n prepare(selection: { title?: string; guide0?: string; guide1?: string; guide2?: string }) {\n const { title, guide0, guide1, guide2 } = selection;\n\n const all = [guide0, guide1, guide2].filter((guide): guide is string => isDefined(guide));\n const shown = all.slice(0, 2);\n const hasMore = isDefined(guide2);\n\n function formatSubtitle() {\n if (!isDefined(shown)) return \"No guides selected\";\n if (hasMore) return `${shown.join(\", \")}, and others`;\n return shown.join(\" and \");\n }\n\n return {\n title: title ?? \"Group\",\n subtitle: formatSubtitle(),\n };\n },\n },\n }),\n ],\n }),\n ],\n});\n","import { guideTypeName } from \"@/schemas/types/guide\";\nimport { handbookTypeName } from \"@/schemas/types/handbook\";\n\n/** Document types that should not appear in the \"create new\" menu. */\nexport const singletonTypes = new Set<string>([handbookTypeName]);\n\n/** All Handbook document types used to filter template items for non-editors. */\nexport const documentTypes = new Set<string>([handbookTypeName, guideTypeName]);\n","/** Width in pixels the sidebar pane settles at until it is resized. */\nexport const sidebarWidth = 350;\n\n/** Minimum width in pixels the sidebar pane occupies before collapsing to a vertical label. */\nexport const sidebarMinimumWidth = 320;\n\n/** Maximum width in pixels the sidebar pane can be resized to. */\nexport const sidebarMaximumWidth = 640;\n\n/** Minimum width in pixels the content pane occupies. */\nexport const contentMinimumWidth = 320;\n\n/** Share of the available space the content pane takes relative to the sidebar. */\nexport const contentFlex = 2.5;\n\n/** Width in pixels of a pane collapsed to a vertical label. */\nexport const collapsedPaneWidth = 51;\n\n/** Estimated height in pixels of a sidebar row, refined once the rows are measured. */\nexport const sidebarItemHeight = 37;\n\n/** Minimum width in pixels the tool occupies before the Studio scrolls horizontally. */\nexport const toolMinimumWidth = 320;\n\n/** Maximum width in pixels of the readable column inside the content pane. */\nexport const contentWidth = 640;\n\n/** Horizontal space in pixels between the readable column and the edges of the content pane. */\nexport const contentPaddingInline = 20;\n\n/** Space in pixels above the heading of a content panel. */\nexport const contentPaddingBlockStart = 32;\n\n/** Space in pixels below the last element of a content panel, so the end of long content clears the pane edge. */\nexport const contentPaddingBlockEnd = 220;\n\n/** Vertical rhythm in pixels that guide content and content panels are spaced on. */\nexport const contentSpacing = {\n section: 48,\n paragraph: 16,\n heading: 48,\n media: 24,\n callout: 32,\n blockquote: 32,\n list: 32,\n nestedList: 12,\n rule: 40,\n};\n","import { imageTypeName } from \"@/schemas/blocks/image\";\nimport { videoTypeName } from \"@/schemas/blocks/video\";\n\n/** Resolves a Portable Text asset reference to the single URL the viewer renders it from. */\nexport const assetUrlFragment = `\"asset\": { \"url\": asset.asset->url }`;\n\n/** Expands guide content members with resolved asset URLs. */\nexport const guideContentFragment = `\n _type == \"${imageTypeName}\" => { ..., ${assetUrlFragment} },\n _type == \"${videoTypeName}\" => { ..., ${assetUrlFragment} }\n`;\n\n/** Expands a guide reference with resolved asset URLs throughout its content. */\nexport const guideFragment = `...@-> {\n ...,\n content[] { ..., ${guideContentFragment} }\n}`;\n","import type { SanityClient } from \"sanity\";\n\n/** A GROQ query string branded with the shape of the data it returns. */\nexport type TypedQuery<T> = string & { readonly __result?: T };\n\n/**\n * Brands a GROQ query with the shape of the data it returns, so a fetch can infer its result type\n * instead of being told it at every call site.\n *\n * @param query - The GROQ query string.\n * @returns The query, typed to the given result shape.\n */\nexport function defineTypedQuery<T>(query: string): TypedQuery<T> {\n return query;\n}\n\n/**\n * Runs a branded query against the dataset, resolving a missing document to undefined.\n *\n * @param client - The Sanity client to query with.\n * @param query - The branded query to run.\n * @returns The result, or undefined when the query matched nothing.\n */\nexport async function fetchQuery<T>(client: SanityClient, query: TypedQuery<T>) {\n return (await client.fetch<T | null>(query)) ?? undefined;\n}\n","import { guideFragment } from \"@/groq/fragments\";\nimport { defineTypedQuery } from \"@/lib/groq\";\nimport type { SanityHandbookGuide } from \"@/schemas/types/guide\";\nimport { guideTypeName } from \"@/schemas/types/guide\";\nimport type { SanityHandbook } from \"@/schemas/types/handbook\";\nimport { handbookTypeName } from \"@/schemas/types/handbook\";\n\n/** Fetches the Handbook singleton with expanded guide references. */\nexport const handbookQuery = defineTypedQuery<SanityHandbook>(`\n *[_type == \"${handbookTypeName}\"][0] {\n ...,\n groups[] {\n ...,\n guides[] {\n ...,\n ${guideFragment}\n }\n }\n }\n`);\n\n/** Matches the documents whose changes the Handbook tool refetches on. */\nexport const handbookDocumentsQuery = defineTypedQuery<SanityHandbook | SanityHandbookGuide>(\n `*[_type == \"${handbookTypeName}\" || _type == \"${guideTypeName}\"]`,\n);\n","import { useEffect, useState } from \"react\";\nimport { useClient } from \"sanity\";\n\nimport { handbookDocumentsQuery, handbookQuery } from \"@/groq/documents\";\nimport { fetchQuery } from \"@/lib/groq\";\nimport type { SanityHandbook } from \"@/schemas/types/handbook\";\n\n/**\n * Fetches the Handbook singleton from the dataset with its guide references expanded, refetching\n * whenever one of the documents it draws on changes.\n *\n * @returns The Handbook and a flag for whether it is still loading.\n */\nexport function useHandbookDocument() {\n const client = useClient({ apiVersion: \"2026-01-01\" });\n const [handbook, setHandbook] = useState<SanityHandbook | undefined>(undefined);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n async function fetchHandbook() {\n setHandbook(await fetchQuery(client, handbookQuery));\n setLoading(false);\n }\n\n void fetchHandbook();\n\n const subscription = client.listen(handbookDocumentsQuery).subscribe(() => {\n void fetchHandbook();\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [client]);\n\n return { handbook, loading };\n}\n","import { createContext, useContext, useState } from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport { useHandbookDocument } from \"@/hooks/use-handbook-document\";\nimport { isDefined } from \"@/lib/utils\";\nimport type { SanityHandbookBlockDefinition, SanityHandbookDocumentRole } from \"@/plugin\";\nimport type { SanityHandbook } from \"@/schemas/types/handbook\";\n\n/** Plugin configuration with every optional value already resolved to a concrete one. */\nexport interface HandbookProviderConfig {\n /** Heading displayed at the top of the sidebar. */\n sidebarTitle: string;\n /** Document roles from the plugin configuration. */\n roles: SanityHandbookDocumentRole[];\n /** Custom block definitions registered by the consumer. */\n blocks: SanityHandbookBlockDefinition[];\n /** Fallback message shown when a field has no description. */\n undocumentedFieldMessage: string;\n}\n\n/** Provider configuration alongside the tab and sidebar state the panes share. */\ntype HandbookContextValues = HandbookProviderConfig & {\n /** Identifier of the currently selected tab, or undefined when none is selected. */\n activeTab: string | undefined;\n /** Whether the sidebar is currently expanded. */\n sidebarExpanded: boolean;\n /** Whether Handbook data is still loading from the dataset. */\n loading: boolean;\n /** Handbook singleton fetched from the dataset. */\n handbook: SanityHandbook | undefined;\n /** Sets the active tab by identifier. */\n setActiveTab: (id: string) => void;\n /** Toggles the sidebar expanded state. */\n setSidebarExpanded: (expanded: boolean) => void;\n};\n\nexport type HandbookProviderProps = HandbookProviderConfig & {\n children: ReactNode;\n};\n\nconst HandbookContext = createContext<HandbookContextValues | undefined>(undefined);\n\n/**\n * Accesses the Handbook context for tab state and plugin configuration.\n *\n * @returns The resolved plugin configuration alongside the state the panes share.\n * @throws {Error} If used outside the provider.\n */\nexport function useHandbookContext() {\n const handbookContext = useContext(HandbookContext);\n\n if (!isDefined(handbookContext)) throw new Error(\"useHandbookContext can only be used within <HandbookProvider>\");\n\n return handbookContext;\n}\n\n/**\n * Provides the tab state the sidebar and content panes share, alongside the plugin configuration and\n * the handbook singleton fetched from the dataset.\n *\n * @param props - Configuration from the plugin, and the tool to provide it to.\n * @returns The provider wrapping its children.\n */\nexport function HandbookProvider({\n sidebarTitle,\n roles,\n blocks,\n undocumentedFieldMessage,\n children,\n}: HandbookProviderProps) {\n const [activeTab, setActiveTab] = useState<string | undefined>(undefined);\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const { handbook, loading } = useHandbookDocument();\n\n return (\n <HandbookContext\n value={{\n sidebarTitle,\n roles,\n blocks,\n undocumentedFieldMessage,\n activeTab,\n sidebarExpanded,\n loading,\n handbook,\n setActiveTab,\n setSidebarExpanded,\n }}\n >\n {children}\n </HandbookContext>\n );\n}\n","import { Box, Card, Flex, Layer, LayerProvider, Text, useElementSize, useTheme_v2 } from \"@sanity/ui\";\nimport { useContext } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { PaneContext } from \"sanity/_singletons\";\n\nimport { collapsedPaneWidth } from \"@/config/layout\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type PaneHeaderProps = ComponentProps<\"div\"> & {\n title: string;\n backButton?: ReactNode;\n};\n\nexport function PaneHeader({ title, backButton, style, ...props }: PaneHeaderProps) {\n const { color } = useTheme_v2();\n const pane = useContext(PaneContext);\n const paneSize = useElementSize(pane?.rootElement ?? null);\n\n const collapsed = pane?.collapsed ?? false;\n const isLast = pane?.isLast ?? false;\n const paneHeight = paneSize?.border.height ?? 0;\n const collapsedWidth = paneHeight > 0 ? paneHeight : window.innerHeight;\n const { bg, fg } = color.selectable.default.enabled;\n\n function handleTitleClick() {\n if (collapsed) return;\n pane?.collapse();\n }\n\n function handleLayoutClick() {\n if (!collapsed) return;\n pane?.expand();\n }\n\n return (\n <LayerProvider zOffset={100}>\n <Layer\n data-collapsed={collapsed ? \"\" : undefined}\n style={{ lineHeight: 0, position: \"sticky\", top: 0, ...style }}\n {...props}\n >\n <Card tone=\"inherit\" data-collapsed={collapsed ? \"\" : undefined}>\n <Flex\n direction=\"column\"\n gap={3}\n onClick={handleLayoutClick}\n padding={3}\n sizing=\"border\"\n style={{\n width: collapsed ? collapsedWidth : undefined,\n transform: collapsed ? \"rotate(90deg)\" : undefined,\n transformOrigin: `calc(${collapsedPaneWidth}px / 2)`,\n }}\n >\n <Flex align=\"flex-start\" gap={3}>\n {isDefined(backButton) && <Box flex=\"none\">{backButton}</Box>}\n <Card\n flex={1}\n onClick={handleTitleClick}\n padding={2}\n paddingLeft={isDefined(backButton) ? 1 : 2}\n tabIndex={isLast && !collapsed ? -1 : 0}\n style={{ backgroundColor: bg, minWidth: 0 }}\n __unstable_focusRing\n >\n <Flex align=\"center\" gap={1}>\n <Text\n size={1}\n textOverflow=\"ellipsis\"\n weight=\"semibold\"\n style={{ color: fg, cursor: \"default\", minWidth: 0, outline: \"none\" }}\n >\n {title}\n </Text>\n </Flex>\n </Card>\n </Flex>\n </Flex>\n </Card>\n </Layer>\n </LayerProvider>\n );\n}\n","import { ArrowLeftIcon } from \"@sanity/icons/ArrowLeft\";\nimport { Box, Button, Heading, Stack, Text } from \"@sanity/ui\";\nimport { useContext } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { PaneLayoutContext } from \"sanity/_singletons\";\nimport { PaneContent } from \"sanity/structure\";\n\nimport { PaneHeader } from \"@/components/pane-header\";\nimport { contentPaddingBlockEnd, contentPaddingBlockStart, contentPaddingInline, contentWidth } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type ContentPanelProps = Omit<ComponentProps<typeof PaneContent>, \"id\" | \"title\"> & {\n id: string;\n title: string;\n description?: string;\n children: ReactNode;\n};\n\nexport function ContentPanel({ id, title, description, children, ...props }: ContentPanelProps) {\n const { setSidebarExpanded } = useHandbookContext();\n const paneLayout = useContext(PaneLayoutContext);\n\n return (\n <>\n <PaneHeader\n title={title}\n backButton={\n paneLayout?.collapsed === true && (\n <Button\n aria-label=\"Back\"\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n onClick={() => {\n setSidebarExpanded(true);\n }}\n />\n )\n }\n />\n <PaneContent id={`panel-${id}`} aria-labelledby={id} overflow=\"auto\" {...props}>\n <Box\n style={{\n maxWidth: contentWidth,\n boxSizing: \"border-box\",\n marginInline: \"auto\",\n paddingInline: contentPaddingInline,\n paddingBlockStart: contentPaddingBlockStart,\n paddingBlockEnd: contentPaddingBlockEnd,\n }}\n >\n <Stack marginBottom={6} gap={5}>\n <Heading as=\"h2\" size={4}>\n {title}\n </Heading>\n {isDefined(description) && (\n <Text size={1} muted>\n {description}\n </Text>\n )}\n </Stack>\n {children}\n </Box>\n </PaneContent>\n </>\n );\n}\n","import { Box, Stack, Text, useClickOutsideEvent } from \"@sanity/ui\";\nimport { Popover } from \"@sanity/ui/popover\";\nimport { useRef } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nexport type FieldHintProps = Omit<ComponentProps<typeof Popover>, \"content\" | \"open\" | \"children\"> & {\n label: string;\n icon: ReactNode;\n open: boolean;\n children: string;\n onOpen: () => void;\n onClose: () => void;\n};\n\nexport function FieldHint({ label, icon, open, children, onOpen, onClose, ...props }: FieldHintProps) {\n const buttonReference = useRef<HTMLButtonElement | null>(null);\n const popoverReference = useRef<HTMLDivElement | null>(null);\n\n useClickOutsideEvent(open ? onClose : undefined, () => [buttonReference.current, popoverReference.current]);\n\n return (\n <Popover\n open={open}\n placement=\"top\"\n portal\n radius={2}\n shadow={2}\n content={\n <div ref={popoverReference}>\n <Box padding={3} style={{ maxWidth: 280 }}>\n <Stack gap={3}>\n <Text size={1} weight=\"semibold\">\n {label}\n </Text>\n <Text size={1} muted>\n {children}\n </Text>\n </Stack>\n </Box>\n </div>\n }\n {...props}\n >\n <button\n ref={buttonReference}\n aria-label={label}\n type=\"button\"\n onClick={open ? onClose : onOpen}\n onPointerEnter={(event) => {\n if (event.pointerType === \"mouse\") onOpen();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"mouse\") onClose();\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: 2,\n fontSize: 16,\n color: \"var(--card-icon-color)\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n {icon}\n </button>\n </Popover>\n );\n}\n","import type { ComponentProps, ComponentType } from \"react\";\n\nimport { InfoIcon } from \"@/icons/info\";\nimport { LightbulbIcon } from \"@/icons/lightbulb\";\nimport { TriangleAlertIcon } from \"@/icons/triangle-alert\";\nimport type { SanityHandbookMetadata } from \"@/plugin\";\n\n/** A kind of hint a field can carry, pairing its metadata property with how it is presented. */\ninterface HintKind {\n /** Property on the field's handbook metadata holding the hint text. */\n name: keyof Pick<SanityHandbookMetadata, \"tip\" | \"info\" | \"caution\">;\n /** Heading shown above the hint text, and the icon's accessible label. */\n label: string;\n /** Icon identifying the kind wherever the hint appears. */\n icon: ComponentType<ComponentProps<\"svg\">>;\n}\n\n/** Hint kinds a field can carry, in the order they are displayed. */\nexport const hintKinds: HintKind[] = [\n { name: \"tip\", label: \"Tip\", icon: LightbulbIcon },\n { name: \"info\", label: \"Information\", icon: InfoIcon },\n { name: \"caution\", label: \"Caution\", icon: TriangleAlertIcon },\n];\n","import { Flex } from \"@sanity/ui\";\nimport type { FlexProps } from \"@sanity/ui\";\nimport { useState } from \"react\";\n\nimport { FieldHint } from \"@/components/field/hint\";\nimport { defaultIconProps } from \"@/config/defaults\";\nimport { hintKinds } from \"@/config/hints\";\nimport { isDefined } from \"@/lib/utils\";\nimport type { SanityHandbookMetadata } from \"@/plugin\";\n\nexport type FieldHintsProps = FlexProps & Pick<SanityHandbookMetadata, \"tip\" | \"info\" | \"caution\">;\n\nexport function FieldHints({ tip, info, caution, ...props }: FieldHintsProps) {\n const [openHint, setOpenHint] = useState<string | undefined>(undefined);\n\n const hints = { tip, info, caution };\n\n function closeHint() {\n setOpenHint(undefined);\n }\n\n return (\n <Flex align=\"center\" gap={2} {...props}>\n {hintKinds.flatMap(({ name, label, icon: Icon }) => {\n const hint = hints[name];\n if (!isDefined(hint)) return [];\n\n return (\n <FieldHint\n key={name}\n label={label}\n icon={<Icon {...defaultIconProps} />}\n open={openHint === name}\n onOpen={() => {\n setOpenHint(name);\n }}\n onClose={closeHint}\n >\n {hint}\n </FieldHint>\n );\n })}\n </Flex>\n );\n}\n","import type { ComponentProps, ComponentType, ReactNode } from \"react\";\n\nimport { createSanityIcon } from \"@/lib/icons\";\nimport { convertCase } from \"@/lib/utils\";\n\n/**\n * Resolves the label shown for a schema type, preferring Handbook metadata over the schema's own\n * title and falling back to a title-cased name.\n *\n * @param type - The schema type or field to resolve a label for.\n * @returns The label.\n */\nexport function resolveTitle(type: { name: string; title?: string; handbook?: { title?: string } }) {\n const { name, title, handbook } = type;\n\n return handbook?.title ?? title ?? convertCase(name, \"title\");\n}\n\n/**\n * Resolves the description shown for a schema type, preferring Handbook metadata and ignoring the\n * non-string descriptions a schema may carry.\n *\n * @param type - The schema type or field to resolve a description for.\n * @returns The description, or undefined when neither source provides one.\n */\nexport function resolveDescription(type: { description?: unknown; handbook?: { description?: string } }) {\n const { description, handbook } = type;\n\n return handbook?.description ?? (typeof description === \"string\" ? description : undefined);\n}\n\n/**\n * Narrows a schema type's icon to a renderable component, discarding the string form a schema may\n * carry instead. A consumer's icon is redrawn at the plugin's own weight, so it sits beside the\n * built-in ones rather than at its own library's default size.\n *\n * @param type - The schema type to read an icon from.\n * @returns The icon component, or undefined when none is set.\n */\nexport function resolveIcon(type: { icon?: ReactNode | ComponentType<ComponentProps<\"svg\">> }) {\n return typeof type.icon === \"function\" ? createSanityIcon(type.icon) : undefined;\n}\n","import type { FieldDefinition, Schema } from \"sanity\";\n\nimport { isDefined } from \"@/lib/utils\";\n\n/** A schema field as Sanity compiles it, with its type resolved to an object rather than a name. */\ninterface CompiledField {\n /** Field identifier in the schema. */\n name: string;\n /** Resolved type object containing the type name and base type metadata. */\n type: { name: string; title?: string; description?: string; fields?: unknown[]; of?: unknown[] };\n /** Custom title set directly on inline object definitions. */\n title?: string;\n /** Custom description set directly on inline object definitions. */\n description?: string;\n /** Fields defined directly on inline object definitions. */\n fields?: unknown[];\n /** Array members defined directly on inline array definitions. */\n of?: unknown[];\n /** Optional Handbook metadata annotations for this field. */\n handbook?: FieldDefinition[\"handbook\"];\n}\n\n/** A schema field flattened into the shape the Handbook renders, with its type collapsed to a name. */\nexport interface NormalisedField {\n /** Field identifier in the schema. */\n name: string;\n /** Resolved type name. */\n type: string;\n /** Display title, falling back to the one declared on the base type. */\n title?: string;\n /** Description, falling back to the one declared on the base type. */\n description?: string;\n /** Optional Handbook metadata annotations for this field. */\n handbook?: FieldDefinition[\"handbook\"];\n /** Normalised subfields, present on object types. */\n fields?: NormalisedField[];\n /** Normalised members, present on array types. */\n of?: NormalisedField[];\n}\n\n/** Schema type names treated as leaf types whose subfields are not displayed. */\nconst opaqueTypes = new Set([\n \"block\",\n \"boolean\",\n \"crossDatasetReference\",\n \"date\",\n \"datetime\",\n \"file\",\n \"geopoint\",\n \"image\",\n \"number\",\n \"reference\",\n \"slug\",\n \"string\",\n \"text\",\n \"url\",\n]);\n\n/** Fields injected by Sanity's built-in opaque types during schema compilation. */\nconst inheritedFieldNames: Partial<Record<string, Set<string>>> = {\n block: new Set([\"children\", \"level\", \"listItem\", \"markDefs\", \"style\"]),\n file: new Set([\"asset\", \"media\"]),\n geopoint: new Set([\"alt\", \"lat\", \"lng\"]),\n image: new Set([\"asset\", \"crop\", \"hotspot\", \"media\"]),\n slug: new Set([\"current\", \"source\"]),\n};\n\n/**\n * Checks whether a value is a compiled schema field with a nested type object.\n *\n * @param value - The value to check.\n * @returns True if the value is a compiled field.\n */\nfunction isCompiledField(value: unknown): value is CompiledField {\n if (typeof value !== \"object\" || value === null) return false;\n if (!(\"name\" in value) || !(\"type\" in value)) return false;\n\n return typeof value.type === \"object\" && value.type !== null;\n}\n\n/**\n * Checks whether a value has a `fields` array property.\n *\n * @param value - The value to check.\n * @returns True if the value contains a `fields` array.\n */\nfunction hasFieldsArray(value: unknown): value is { fields: unknown[] } {\n if (typeof value !== \"object\" || value === null || !(\"fields\" in value)) return false;\n\n return Array.isArray(value.fields);\n}\n\n/**\n * Checks whether a value has an `of` array property.\n *\n * @param value - The value to check.\n * @returns True if the value contains an `of` array.\n */\nfunction hasOfArray(value: unknown): value is { of: unknown[] } {\n if (typeof value !== \"object\" || value === null || !(\"of\" in value)) return false;\n\n return Array.isArray(value.of);\n}\n\n/**\n * Extracts the type name a value declares, where it names one at all.\n *\n * @param value - The value to inspect.\n * @returns The type name, or undefined when the value declares none.\n */\nfunction getTypeName(value: unknown) {\n if (typeof value !== \"object\" || value === null || !(\"type\" in value)) return undefined;\n\n return typeof value.type === \"string\" ? value.type : undefined;\n}\n\n/**\n * Extracts the parent type name from a compiled schema type, if present.\n *\n * @param resolvedType - The compiled schema type to inspect.\n * @returns The parent type name, or undefined when the type extends none.\n */\nfunction getParentTypeName(resolvedType: unknown) {\n if (typeof resolvedType !== \"object\" || resolvedType === null || !(\"type\" in resolvedType)) return undefined;\n if (typeof resolvedType.type !== \"object\" || resolvedType.type === null || !(\"name\" in resolvedType.type)) {\n return undefined;\n }\n\n return String(resolvedType.type.name);\n}\n\n/**\n * Normalises a compiled schema field into the shape the Handbook renders. Type names already seen are\n * tracked so a type that refers back to itself does not recurse forever.\n *\n * @param field - A compiled schema field or plain field definition.\n * @param visited - Type names already seen in this normalisation chain.\n * @returns The normalised field.\n */\nfunction normaliseField(field: unknown, visited = new Set<string>()) {\n if (isCompiledField(field)) {\n const typeName = field.type.name;\n\n const result: NormalisedField = {\n name: field.name,\n type: typeName,\n title: field.title ?? field.type.title,\n description: field.description ?? field.type.description,\n handbook: field.handbook,\n };\n\n if (!visited.has(typeName)) {\n const shouldTrack = !opaqueTypes.has(typeName) && typeName !== \"object\" && typeName !== \"array\";\n const next = shouldTrack ? new Set([...visited, typeName]) : visited;\n const fieldSource = hasFieldsArray(field) ? field : field.type;\n const ofSource = hasOfArray(field) ? field : field.type;\n\n if (hasFieldsArray(fieldSource)) {\n result.fields = fieldSource.fields.map((subfield) => normaliseField(subfield, next));\n }\n if (hasOfArray(ofSource)) result.of = ofSource.of.map((member) => normaliseField(member, next));\n }\n\n return result;\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion -- Schema values that are already normalised carry no marker to narrow on.\n return field as NormalisedField;\n}\n\n/**\n * Resolves only the fields a custom type adds on top of an opaque base type, leaving out the ones the\n * base type contributes of its own accord.\n *\n * @param resolvedType - The compiled or normalised schema type.\n * @param parentName - The opaque base type name.\n * @returns The custom fields, or undefined when the type adds none.\n */\nfunction resolveCustomFields(resolvedType: unknown, parentName: string) {\n if (!hasFieldsArray(resolvedType)) return undefined;\n\n const inherited = inheritedFieldNames[parentName];\n\n const customFields = resolvedType.fields\n .map((field: unknown) => normaliseField(field))\n .filter((field) => !isDefined(inherited) || !inherited.has(field.name));\n\n return isDefined(customFields) ? customFields : undefined;\n}\n\n/**\n * Normalises a list of raw field values into the shape the Handbook renders.\n *\n * @param items - Raw field values to normalise.\n * @returns The normalised fields, or undefined when the list holds none.\n */\nfunction resolveNormalisedFields(items: unknown[]) {\n const normalised = items.map((item) => normaliseField(item));\n\n return isDefined(normalised) ? normalised : undefined;\n}\n\n/**\n * Normalises array members and filters out opaque types that have no meaningful subfields.\n *\n * @param members - Raw array member values to normalise.\n * @returns The normalised non-opaque members, or undefined when none remain.\n */\nfunction resolveNormalisedMembers(members: unknown[]) {\n const normalised = members.map((member) => normaliseField(member)).filter((member) => !opaqueTypes.has(member.type));\n\n return isDefined(normalised) ? normalised : undefined;\n}\n\n/**\n * Resolves the name of the type a value extends, reaching into the schema registry when the value\n * carries nothing but a type name of its own.\n *\n * @param value - The value to inspect.\n * @param schema - The Sanity schema registry.\n * @returns The parent type name, or undefined when the value extends none.\n */\nfunction resolveParentName(value: unknown, schema: Schema) {\n const direct = getParentTypeName(value);\n if (isDefined(direct)) return direct;\n\n const typeName = getTypeName(value);\n if (!isDefined(typeName)) return undefined;\n\n const resolvedType = schema.get(typeName);\n return isDefined(resolvedType) ? getParentTypeName(resolvedType) : undefined;\n}\n\n/**\n * Extracts the fields a value displays, whether it carries them directly, carries array members that\n * do, or names a type that does.\n *\n * @param value - The value to extract fields from.\n * @param schema - The Sanity schema registry.\n * @returns The resolved fields, or undefined when the value has none.\n */\nfunction resolveFields(value: unknown, schema: Schema) {\n if (hasFieldsArray(value)) {\n const parentName = resolveParentName(value, schema);\n if (isDefined(parentName) && opaqueTypes.has(parentName)) return resolveCustomFields(value, parentName);\n\n return resolveNormalisedFields(value.fields);\n }\n\n if (hasOfArray(value)) {\n const members = value.of;\n\n if (members.length === 1) {\n const [member] = members;\n const normalised = normaliseField(member);\n\n if (opaqueTypes.has(normalised.type)) return undefined;\n\n if (hasFieldsArray(normalised)) {\n const parentName = resolveParentName(normalised, schema);\n if (isDefined(parentName) && opaqueTypes.has(parentName)) return resolveCustomFields(normalised, parentName);\n\n return resolveNormalisedFields(normalised.fields);\n }\n\n const memberType = schema.get(normalised.type);\n if (isDefined(memberType)) return resolveFields(memberType, schema);\n }\n\n return resolveNormalisedMembers(members);\n }\n\n return undefined;\n}\n\n/**\n * Resolves the displayable subfields of a field definition by traversing the schema.\n *\n * @param field - The parent field definition.\n * @param schema - The Sanity schema registry.\n * @returns The non-opaque subfields, or undefined when the field has none.\n */\nexport function getSubfields(field: FieldDefinition | NormalisedField, schema: Schema) {\n if (opaqueTypes.has(field.type)) return undefined;\n\n const directFields = resolveFields(field, schema);\n if (isDefined(directFields)) return directFields;\n\n const resolvedType = schema.get(field.type);\n if (!isDefined(resolvedType)) return undefined;\n\n const parentName = getParentTypeName(resolvedType);\n if (isDefined(parentName) && opaqueTypes.has(parentName)) {\n return resolveCustomFields(resolvedType, parentName);\n }\n\n return resolveFields(resolvedType, schema);\n}\n","import { ChevronDownIcon } from \"@sanity/icons/ChevronDown\";\nimport { ChevronRightIcon } from \"@sanity/icons/ChevronRight\";\nimport { Box, Card, Flex, Stack, Text } from \"@sanity/ui\";\nimport type { StackProps } from \"@sanity/ui\";\nimport { useState } from \"react\";\nimport type { FieldDefinition } from \"sanity\";\nimport { useSchema } from \"sanity\";\n\nimport { FieldHints } from \"@/components/field/hints\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { resolveDescription, resolveTitle } from \"@/lib/display\";\nimport type { NormalisedField } from \"@/lib/schema\";\nimport { getSubfields } from \"@/lib/schema\";\nimport { convertCase, isDefined } from \"@/lib/utils\";\n\nexport type FieldProps = StackProps & {\n field: FieldDefinition | NormalisedField;\n ancestors?: Set<string>;\n};\n\n/** Shared empty ancestor set, so the default prop keeps a stable reference across renders. */\nconst noAncestors = new Set<string>();\n\nexport function Field({ field, ancestors = noAncestors, ...props }: FieldProps) {\n const schema = useSchema();\n const { undocumentedFieldMessage } = useHandbookContext();\n const [expanded, setExpanded] = useState(false);\n\n const effectiveTitle = resolveTitle(field);\n const effectiveDescription = resolveDescription(field) ?? undocumentedFieldMessage;\n\n const { example, tip, info, caution } = field.handbook ?? {};\n const hasHints = isDefined([tip, info, caution]);\n\n const isCycle = ancestors.has(field.type);\n const subfields = isCycle ? undefined : getSubfields(field, schema);\n const hasSubfields = isDefined(subfields);\n\n return (\n <Stack gap={2} {...props}>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1} gap={2}>\n <Box flex={1}>\n <Flex align=\"center\" gap={2}>\n <Text size={1} weight=\"medium\">\n {effectiveTitle}\n </Text>\n <Text size={0} muted style={{ marginTop: 2 }}>\n {field.type}\n </Text>\n </Flex>\n </Box>\n {hasHints && <FieldHints tip={tip} info={info} caution={caution} />}\n </Flex>\n {isDefined(effectiveDescription) && (\n <Text size={1} muted>\n {effectiveDescription}\n </Text>\n )}\n {isDefined(example) && (\n <Box marginTop={1}>\n <Text size={1} muted style={{ fontStyle: \"italic\" }}>\n e.g. {example}\n </Text>\n </Box>\n )}\n </Stack>\n {isCycle && (\n <Box marginTop={2}>\n <Text size={1} muted style={{ fontStyle: \"italic\" }}>\n See {convertCase(field.type, \"title\")} above.\n </Text>\n </Box>\n )}\n {hasSubfields && (\n <>\n <Card\n as=\"button\"\n padding={3}\n radius={2}\n sizing=\"border\"\n tone=\"transparent\"\n onClick={() => {\n setExpanded(!expanded);\n }}\n style={{ marginTop: 16, textAlign: \"left\", border: \"none\", cursor: \"pointer\" }}\n >\n <Flex align=\"center\" gap={2}>\n <Text size={0}>{expanded ? <ChevronDownIcon /> : <ChevronRightIcon />}</Text>\n <Text size={1} muted weight=\"medium\">\n {subfields.length} subfield{subfields.length === 1 ? \"\" : \"s\"}\n </Text>\n </Flex>\n </Card>\n {expanded && (\n <div\n style={{\n marginTop: 16,\n marginBottom: 8,\n paddingLeft: 16,\n borderLeft: \"1px solid var(--card-border-color)\",\n }}\n >\n <Stack gap={5}>\n {subfields.map((subfield) => (\n <Field key={subfield.name} field={subfield} ancestors={new Set([...ancestors, field.type])} />\n ))}\n </Stack>\n </div>\n )}\n </>\n )}\n </Stack>\n );\n}\n","import { Field } from \"@/components/field/field\";\nimport { contentSpacing } from \"@/config/layout\";\nimport { resolveDescription, resolveIcon, resolveTitle } from \"@/lib/display\";\nimport type { SanityHandbookDocumentRole } from \"@/plugin\";\n\n/**\n * Builds a section for each configured document role.\n *\n * @param roles - Document roles from the plugin configuration.\n * @returns One section per role, holding an entry per document type.\n */\nexport function documentTypesSections(roles: SanityHandbookDocumentRole[]) {\n return roles.map(({ title, documents }) => ({\n title,\n entries: documents.map((document) => ({\n id: document.name,\n title: resolveTitle(document),\n description: resolveDescription(document),\n icon: resolveIcon(document),\n render: () => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: contentSpacing.section }}>\n {document.fields.map((field) => (\n <Field key={field.name} field={field} />\n ))}\n </div>\n ),\n })),\n }));\n}\n","import type { ComponentProps } from \"react\";\n\nexport type LayoutGridIconProps = ComponentProps<\"svg\">;\n\nexport function LayoutGridIcon(props: LayoutGridIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </svg>\n );\n}\n","import { ChevronRightIcon } from \"@sanity/icons/ChevronRight\";\nimport { Box, Card, Flex, Stack, Text } from \"@sanity/ui\";\n\nimport { contentSpacing } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { resolveDescription, resolveIcon, resolveTitle } from \"@/lib/display\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport function DocumentTypesOverview() {\n const { roles, setActiveTab, setSidebarExpanded } = useHandbookContext();\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: contentSpacing.section }}>\n {roles.map((role) => {\n const { title, description, documents } = role;\n\n return (\n <Stack key={title} gap={2}>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n {title}\n </Text>\n </Flex>\n {isDefined(description) && (\n <Text size={1} muted>\n {description}\n </Text>\n )}\n </Stack>\n <Box marginTop={1}>\n <Stack gap={2}>\n {documents.map((document) => {\n const Icon = resolveIcon(document);\n const documentDescription = resolveDescription(document);\n\n return (\n <Card\n key={document.name}\n as=\"button\"\n padding={3}\n radius={2}\n sizing=\"border\"\n tone=\"inherit\"\n onClick={() => {\n setActiveTab(document.name);\n setSidebarExpanded(false);\n }}\n style={{\n width: \"calc(100% + 24px)\",\n marginLeft: \"-12px\",\n textAlign: \"left\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n <Flex align=\"center\" gap={3}>\n <Box flex={1}>\n <Stack gap={3}>\n <Flex align=\"center\" gap={2} style={{ marginLeft: \"-4px\" }}>\n {isDefined(Icon) && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 25,\n height: 25,\n color: \"var(--card-icon-color)\",\n }}\n >\n <Icon />\n </div>\n )}\n <Text size={1} weight=\"medium\">\n {resolveTitle(document)}\n </Text>\n </Flex>\n {isDefined(documentDescription) && (\n <Box paddingBottom={1}>\n <Text size={1} muted>\n {documentDescription}\n </Text>\n </Box>\n )}\n </Stack>\n </Box>\n <Box flex=\"none\" style={{ opacity: 0.5 }}>\n <Text muted size={1}>\n <ChevronRightIcon />\n </Text>\n </Box>\n </Flex>\n </Card>\n );\n })}\n </Stack>\n </Box>\n </Stack>\n );\n })}\n </div>\n );\n}\n","import { Flex, Stack, Text } from \"@sanity/ui\";\n\nimport { defaultIconProps } from \"@/config/defaults\";\nimport { hintKinds } from \"@/config/hints\";\nimport { contentSpacing } from \"@/config/layout\";\n\n/** What each hint kind signals to an editor, shown as a legend alongside its icon. */\nconst hintDescriptions = {\n tip: \"Helpful tips and best practices for content editors.\",\n info: \"Additional context about how the field is used.\",\n caution: \"Important warnings about constraints or potential issues.\",\n} satisfies Record<(typeof hintKinds)[number][\"name\"], string>;\n\nexport function HowToUse() {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: contentSpacing.section }}>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Navigating the Handbook\n </Text>\n </Flex>\n <Text size={1} muted>\n The sidebar lists everything the Handbook holds: these introductory pages, then the document types you can\n create, grouped by the role they play on the site, and finally any guides your team has written. Selecting an\n entry opens it here.\n </Text>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Understanding Fields\n </Text>\n </Flex>\n <Text size={1} muted>\n Selecting a document type lists its fields, each showing its name, the kind of value it holds, and what the\n field is for. The documentation is generated from the content model, so what you read always matches what you\n see while editing.\n </Text>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Hints and Warnings\n </Text>\n </Flex>\n <Text size={1} muted>\n Icons beside a field name carry the guidance that would crowd its description if written into it. Hover or\n click one to read what it says, and use the key below to tell the three kinds apart.\n </Text>\n <Stack gap={3} marginTop={2}>\n {hintKinds.map(({ name, icon: Icon }) => (\n <Flex key={name} align=\"center\" gap={3}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n flexShrink: 0,\n fontSize: \"16px\",\n color: \"var(--card-icon-color)\",\n }}\n >\n <Icon {...defaultIconProps} />\n </div>\n <Text size={1} muted>\n {hintDescriptions[name]}\n </Text>\n </Flex>\n ))}\n </Stack>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Nested Fields\n </Text>\n </Flex>\n <Text size={1} muted>\n Some fields hold subfields of their own, such as a content block pairing a heading with body text. A control\n beneath the description counts them and expands to show each one, documented exactly as a top-level field is.\n </Text>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Guides\n </Text>\n </Flex>\n <Text size={1} muted>\n Beneath the document types you may find guides, written by your team rather than generated from the content\n model. They carry what a field description cannot: house style, editorial process, and how all the pieces fit\n together.\n </Text>\n </Stack>\n </div>\n );\n}\n","import { BookTextIcon } from \"@/icons/book-text\";\nimport { LayoutGridIcon } from \"@/icons/layout-grid\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport { DocumentTypesOverview } from \"@/pages/document-types-overview\";\nimport { HowToUse } from \"@/pages/how-to-use\";\n\n/**\n * Builds the section holding the plugin's own introductory pages.\n *\n * @returns A single section listing the built-in pages, in the order they are shown.\n */\nexport function gettingStartedSections() {\n return [\n {\n title: \"Getting Started\",\n entries: [\n {\n id: \"how-to-use-this-handbook\",\n title: \"How to use the Handbook\",\n description:\n \"A guide to navigating the Handbook, reading the documentation for each field, and making sense of its examples, hints, and nested structure.\",\n icon: createSanityIcon(BookTextIcon),\n render: () => <HowToUse />,\n },\n {\n id: \"document-types\",\n title: \"Document Types\",\n description:\n \"An overview of all document types, organised by role. Select a document type to view its fields, descriptions, and examples.\",\n icon: createSanityIcon(LayoutGridIcon),\n render: () => <DocumentTypesOverview />,\n },\n ],\n },\n ];\n}\n","import type { ComponentProps } from \"react\";\n\nexport type PortableLinkProps = ComponentProps<\"a\">;\n\nexport function PortableLink({ children, style, ...props }: PortableLinkProps) {\n return (\n <a target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: \"var(--card-link-fg-color)\", ...style }} {...props}>\n {children}\n </a>\n );\n}\n","import { PortableText } from \"@portabletext/react\";\nimport type { PortableTextComponents, PortableTextMarkComponentProps } from \"@portabletext/react\";\nimport type { ComponentProps } from \"react\";\n\nimport { CalloutContent } from \"@/blocks/callout/content\";\nimport { PortableCode } from \"@/components/content/portable/code\";\nimport { PortableLink } from \"@/components/content/portable/link\";\nimport { contentSpacing } from \"@/config/layout\";\nimport type { SanityHandbookLink } from \"@/schemas/annotations/link\";\nimport type { SanityHandbookCallout } from \"@/schemas/blocks/callout\";\n\nexport type CalloutBlockProps = Omit<ComponentProps<typeof CalloutContent>, \"variant\" | \"children\"> & {\n value: SanityHandbookCallout;\n};\n\n/** Overrides for a callout body, which takes the card's own text styling and leaves paragraphs unwrapped. */\nconst components: PortableTextComponents = {\n block: { normal: ({ children }) => <>{children}</> },\n marks: {\n code: ({ children }) => <PortableCode>{children}</PortableCode>,\n link: ({ children, value }: PortableTextMarkComponentProps<SanityHandbookLink>) => (\n <PortableLink href={value?.href}>{children}</PortableLink>\n ),\n },\n};\n\nexport function CalloutBlock({ value, style, ...props }: CalloutBlockProps) {\n return (\n <CalloutContent variant={value.variant} style={{ marginBlock: contentSpacing.callout, ...style }} {...props}>\n <PortableText value={value.body} components={components} />\n </CalloutContent>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nimport { CodeContent } from \"@/blocks/code/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport { isDefined } from \"@/lib/utils\";\nimport type { SanityHandbookCode } from \"@/schemas/blocks/code\";\n\nexport type CodeBlockProps = Omit<ComponentProps<typeof CodeContent>, \"code\" | \"language\"> & {\n value: SanityHandbookCode;\n};\n\nexport function CodeBlock({ value, style, ...props }: CodeBlockProps) {\n if (!isDefined(value.code)) return null;\n\n return (\n <CodeContent\n code={value.code}\n language={value.language}\n style={{ marginBlock: contentSpacing.media, ...style }}\n {...props}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\n\nimport { HorizontalRuleContent } from \"@/blocks/horizontal-rule/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport type { SanityHandbookHorizontalRule } from \"@/schemas/blocks/horizontal-rule\";\n\nexport type HorizontalRuleBlockProps = ComponentProps<typeof HorizontalRuleContent> & {\n value: SanityHandbookHorizontalRule;\n};\n\nexport function HorizontalRuleBlock({ value: _value, style, ...props }: HorizontalRuleBlockProps) {\n return <HorizontalRuleContent style={{ marginBlock: contentSpacing.rule, ...style }} {...props} />;\n}\n","import type { ComponentProps } from \"react\";\n\nimport { ImageContent } from \"@/blocks/image/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport { isDefined } from \"@/lib/utils\";\nimport type { SanityHandbookImage } from \"@/schemas/blocks/image\";\n\nexport type ImageBlockProps = Omit<ComponentProps<typeof ImageContent>, \"url\" | \"alt\" | \"caption\"> & {\n value: SanityHandbookImage;\n};\n\nexport function ImageBlock({ value, style, ...props }: ImageBlockProps) {\n if (!isDefined(value.asset?.url)) return null;\n\n return (\n <ImageContent\n url={value.asset.url}\n alt={value.alt}\n caption={value.caption}\n style={{ marginBlock: contentSpacing.media, ...style }}\n {...props}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\n\nimport { VideoContent } from \"@/blocks/video/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport { isDefined } from \"@/lib/utils\";\nimport type { SanityHandbookVideo } from \"@/schemas/blocks/video\";\n\nexport type VideoBlockProps = Omit<ComponentProps<typeof VideoContent>, \"url\" | \"caption\"> & {\n value: SanityHandbookVideo;\n};\n\nexport function VideoBlock({ value, style, ...props }: VideoBlockProps) {\n if (!isDefined(value.asset?.url)) return null;\n\n return (\n <VideoContent\n url={value.asset.url}\n caption={value.caption}\n style={{ marginBlock: contentSpacing.media, ...style }}\n {...props}\n />\n );\n}\n","import type { CSSProperties, ComponentProps } from \"react\";\n\n// `ref` is dropped because the element rendered varies, so a ref typed to either list element would be wrong.\nexport type PortableListProps = Omit<ComponentProps<\"ul\">, \"ref\"> & {\n ordered?: boolean;\n};\n\nexport function PortableList({ ordered = false, style, ...props }: PortableListProps) {\n const listStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n margin: 0,\n paddingLeft: \"1.25em\",\n ...style,\n };\n\n if (ordered) return <ol style={listStyle} {...props} />;\n\n return <ul style={listStyle} {...props} />;\n}\n","import { PortableText as PortableTextReact } from \"@portabletext/react\";\nimport type {\n PortableTextComponentProps,\n PortableTextComponents,\n PortableTextMarkComponentProps,\n PortableTextTypeComponent,\n PortableTextTypeComponentProps,\n} from \"@portabletext/react\";\nimport type { ComponentProps, ComponentType } from \"react\";\nimport type { PortableTextBlock, PortableTextListBlock, PortableTextObject } from \"sanity\";\n\nimport { CalloutBlock } from \"@/blocks/callout/block\";\nimport { CodeBlock } from \"@/blocks/code/block\";\nimport { HorizontalRuleBlock } from \"@/blocks/horizontal-rule/block\";\nimport { ImageBlock } from \"@/blocks/image/block\";\nimport { VideoBlock } from \"@/blocks/video/block\";\nimport { PortableBlockquote } from \"@/components/content/portable/blockquote\";\nimport { PortableCode } from \"@/components/content/portable/code\";\nimport { PortableHeading } from \"@/components/content/portable/heading\";\nimport { PortableLink } from \"@/components/content/portable/link\";\nimport { PortableList } from \"@/components/content/portable/list\";\nimport { PortableParagraph } from \"@/components/content/portable/paragraph\";\nimport { contentSpacing } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport type { SanityHandbookLink } from \"@/schemas/annotations/link\";\nimport { calloutTypeName } from \"@/schemas/blocks/callout\";\nimport { codeTypeName } from \"@/schemas/blocks/code\";\nimport { horizontalRuleTypeName } from \"@/schemas/blocks/horizontal-rule\";\nimport { imageTypeName } from \"@/schemas/blocks/image\";\nimport { videoTypeName } from \"@/schemas/blocks/video\";\nimport type { SanityKeyedArray } from \"@/types\";\n\n/**\n * Resolves the space around a list, which tightens once the list is nested inside another.\n *\n * @param level - Nesting depth of the list, counted from one.\n * @returns The vertical space in pixels.\n */\nfunction listSpacing(level: number) {\n return level > 1 ? contentSpacing.nestedList : contentSpacing.list;\n}\n\n/**\n * Component rendered for each block style, mark, and embedded type a guide's rich text can hold.\n * The marks and list items left out are deliberate — the library's own defaults already render them\n * as the surrounding text.\n */\nconst components: PortableTextComponents = {\n block: {\n h2: ({ children }) => (\n <PortableHeading style={{ marginBlockStart: contentSpacing.heading, marginBlockEnd: 4 }}>\n {children}\n </PortableHeading>\n ),\n normal: ({ children }) => (\n <PortableParagraph muted style={{ marginBlock: contentSpacing.paragraph }}>\n {children}\n </PortableParagraph>\n ),\n blockquote: ({ children }) => (\n <PortableBlockquote muted style={{ marginBlock: contentSpacing.blockquote }}>\n {children}\n </PortableBlockquote>\n ),\n },\n list: {\n bullet: ({ children, value }: PortableTextComponentProps<PortableTextListBlock>) => (\n <PortableParagraph muted style={{ marginBlock: listSpacing(value.level) }}>\n <PortableList>{children}</PortableList>\n </PortableParagraph>\n ),\n number: ({ children, value }: PortableTextComponentProps<PortableTextListBlock>) => (\n <PortableParagraph muted style={{ marginBlock: listSpacing(value.level) }}>\n <PortableList ordered>{children}</PortableList>\n </PortableParagraph>\n ),\n },\n marks: {\n code: ({ children }) => <PortableCode>{children}</PortableCode>,\n link: ({ children, value }: PortableTextMarkComponentProps<SanityHandbookLink>) => (\n <PortableLink href={value?.href}>{children}</PortableLink>\n ),\n },\n};\n\n/**\n * Adapts a block component to what Portable Text renders an embedded type with, narrowing the props\n * to the block's own value. The rendering props the library also passes would otherwise reach the DOM.\n *\n * @param Component - Component rendering the block.\n * @returns A component Portable Text can render the type with.\n */\nfunction blockRenderer<Value extends PortableTextObject>(Component: ComponentType<{ value: Value }>) {\n return function Block({ value }: PortableTextTypeComponentProps<Value>) {\n return <Component value={value} />;\n };\n}\n\nexport type PortableTextProps = ComponentProps<\"div\"> & {\n value: SanityKeyedArray<PortableTextBlock>;\n};\n\nexport function PortableText({ value, ...props }: PortableTextProps) {\n const { blocks } = useHandbookContext();\n\n const types: Record<string, PortableTextTypeComponent> = {\n [imageTypeName]: blockRenderer(ImageBlock),\n [videoTypeName]: blockRenderer(VideoBlock),\n [codeTypeName]: blockRenderer(CodeBlock),\n [calloutTypeName]: blockRenderer(CalloutBlock),\n [horizontalRuleTypeName]: blockRenderer(HorizontalRuleBlock),\n };\n for (const block of blocks) types[block.schema.name] = blockRenderer(block.component);\n\n return (\n <div {...props}>\n <PortableTextReact value={value} components={{ ...components, types }} />\n </div>\n );\n}\n","import { PortableText } from \"@/components/content/portable-text\";\nimport { BookOpenTextIcon } from \"@/icons/book-open-text\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport type { SanityHandbook } from \"@/schemas/types/handbook\";\n\n/**\n * Builds a section for each guide group authored in the dataset.\n *\n * @param handbook - Handbook singleton holding the authored guide groups.\n * @returns One section per group, holding an entry per guide.\n */\nexport function guidesSections(handbook: SanityHandbook) {\n return handbook.groups.map(({ title, guides }) => ({\n title,\n entries: guides.map((guide) => ({\n id: guide._key,\n title: guide.title,\n description: guide.description,\n icon: createSanityIcon(BookOpenTextIcon),\n render: () => <PortableText value={guide.content} />,\n })),\n }));\n}\n","import type { ComponentType, ReactNode } from \"react\";\n\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { isDefined } from \"@/lib/utils\";\nimport { documentTypesSections } from \"@/sections/document-types\";\nimport { gettingStartedSections } from \"@/sections/getting-started\";\nimport { guidesSections } from \"@/sections/guides\";\n\n/** A selectable page, pairing its sidebar row with the panel that row opens. */\nexport interface Entry {\n /** Identifier shared by the sidebar row and its panel. */\n id: string;\n /** Label shown in the sidebar and as the panel heading. */\n title: string;\n /** Description shown beneath the panel heading. */\n description?: string;\n /** Icon component shown beside the sidebar label. */\n icon?: ComponentType;\n /** Builds the panel's content, called only while the entry is active. */\n render: () => ReactNode;\n}\n\n/** A titled run of entries, drawn as a sidebar heading and the rows beneath it. */\nexport interface Section {\n /** Text shown above the entries it introduces. */\n title: string;\n /** Entries belonging to the section. */\n entries: Entry[];\n}\n\n/**\n * Composes every page the Handbook shows, in sidebar order.\n *\n * @returns Sections from the built-in pages, the configured document roles, and the authored guides.\n */\nexport function useSections(): Section[] {\n const { roles, handbook, loading } = useHandbookContext();\n\n return [\n ...gettingStartedSections(),\n ...documentTypesSections(roles),\n ...(loading || !isDefined(handbook) ? [] : guidesSections(handbook)),\n ];\n}\n","import type { ComponentProps } from \"react\";\nimport { Pane } from \"sanity/structure\";\n\nimport { ContentPanel } from \"@/components/content-panel\";\nimport { contentFlex, contentMinimumWidth } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { useSections } from \"@/hooks/use-sections\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport type ContentProps = Omit<ComponentProps<typeof Pane>, \"id\">;\n\nexport function Content(props: ContentProps) {\n const { activeTab } = useHandbookContext();\n const sections = useSections();\n\n const entry = sections.flatMap((section) => section.entries).find(({ id }) => id === activeTab);\n\n return (\n <Pane id=\"handbook-content\" flex={contentFlex} minWidth={contentMinimumWidth} {...props}>\n {isDefined(entry) && (\n <ContentPanel id={entry.id} title={entry.title} description={entry.description}>\n {entry.render()}\n </ContentPanel>\n )}\n </Pane>\n );\n}\n","import { Box, Card, Text } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nexport type SidebarHeadingProps = ComponentProps<typeof Box> & {\n title: string;\n};\n\nexport function SidebarHeading({ title, ...props }: SidebarHeadingProps) {\n return (\n <Box paddingY={2} {...props}>\n <Card padding={2}>\n <Text size={1} muted textOverflow=\"ellipsis\" weight=\"semibold\" style={{ cursor: \"default\", outline: \"none\" }}>\n {title}\n </Text>\n </Card>\n </Box>\n );\n}\n","import { ChevronRightIcon } from \"@sanity/icons/ChevronRight\";\nimport { Box, Text } from \"@sanity/ui\";\nimport type { CSSProperties, ComponentProps, ComponentType } from \"react\";\nimport { PreviewCard, SanityDefaultPreview } from \"sanity\";\n\nimport { useHandbookContext } from \"@/contexts/handbook\";\n\nexport type SidebarTabProps = Omit<ComponentProps<typeof PreviewCard>, \"as\" | \"id\" | \"style\"> & {\n id: string;\n label: string;\n icon?: ComponentType;\n style?: CSSProperties;\n};\n\nexport function SidebarTab({ id, label, icon: Icon, style, ...props }: SidebarTabProps) {\n const { activeTab, setActiveTab, setSidebarExpanded } = useHandbookContext();\n const selected = activeTab === id;\n\n return (\n <PreviewCard\n id={id}\n as=\"button\"\n data-as=\"button\"\n selected={selected}\n marginBottom={1}\n radius={2}\n sizing=\"border\"\n tabIndex={-1}\n tone=\"inherit\"\n onClick={() => {\n setActiveTab(id);\n setSidebarExpanded(false);\n }}\n style={{ cursor: \"pointer\", ...style }}\n aria-controls={`panel-${id}`}\n __unstable_focusRing\n {...props}\n >\n <SanityDefaultPreview\n status={\n <Box style={{ opacity: 0.5 }}>\n <Text muted size={1}>\n <ChevronRightIcon />\n </Text>\n </Box>\n }\n icon={Icon}\n layout=\"compact\"\n title={label}\n />\n </PreviewCard>\n );\n}\n","import type { ComponentProps, ComponentType } from \"react\";\nimport { CommandList } from \"sanity\";\nimport { Pane, PaneContent } from \"sanity/structure\";\n\nimport { PaneHeader } from \"@/components/pane-header\";\nimport { SidebarHeading } from \"@/components/sidebar/heading\";\nimport { SidebarTab } from \"@/components/sidebar/tab\";\nimport { sidebarItemHeight, sidebarMaximumWidth, sidebarMinimumWidth, sidebarWidth } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { useSections } from \"@/hooks/use-sections\";\n\n/** A non-selectable heading introducing the run of sidebar tabs beneath it. */\ninterface SidebarHeadingItem {\n /** Marks this entry as a heading rather than a tab. */\n type: \"heading\";\n /** Text shown above the tabs it introduces. */\n title: string;\n}\n\n/** A selectable sidebar row bound to a content panel of the same identifier. */\ninterface SidebarTabItem {\n /** Marks this entry as a tab rather than a heading. */\n type: \"tab\";\n /** Identifier shared with the content panel the tab selects. */\n id: string;\n /** Display label in the sidebar. */\n label: string;\n /** Icon component shown beside the label. */\n icon?: ComponentType;\n}\n\n/** An entry in the flat list the sidebar renders. */\ntype SidebarItem = SidebarHeadingItem | SidebarTabItem;\n\nexport type SidebarProps = Omit<ComponentProps<typeof Pane>, \"id\">;\n\nexport function Sidebar(props: SidebarProps) {\n const { sidebarTitle } = useHandbookContext();\n const sections = useSections();\n\n const items = sections.flatMap(({ title, entries }): SidebarItem[] => [\n { type: \"heading\", title },\n ...entries.map((entry): SidebarItem => ({ type: \"tab\", id: entry.id, label: entry.title, icon: entry.icon })),\n ]);\n\n function getItemDisabled(virtualIndex: number) {\n return items[virtualIndex]?.type === \"heading\";\n }\n\n return (\n <Pane\n id=\"handbook-sidebar\"\n currentMaxWidth={sidebarWidth}\n minWidth={sidebarMinimumWidth}\n maxWidth={sidebarMaximumWidth}\n {...props}\n >\n <PaneHeader title={sidebarTitle} />\n <PaneContent overflow=\"auto\">\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={sidebarTitle}\n canReceiveFocus\n getItemDisabled={getItemDisabled}\n itemHeight={sidebarItemHeight}\n items={items}\n onlyShowSelectionWhenActive\n paddingBottom={1}\n paddingX={3}\n // `CommandList` clones what this returns to set `tabIndex`, so a wrapper component would swallow it.\n renderItem={(item: SidebarItem) =>\n item.type === \"heading\" ? (\n <SidebarHeading title={item.title} />\n ) : (\n <SidebarTab id={item.id} label={item.label} icon={item.icon} />\n )\n }\n wrapAround={false}\n />\n </PaneContent>\n </Pane>\n );\n}\n","import { useContext } from \"react\";\nimport { PaneLayoutContext } from \"sanity/_singletons\";\n\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { Content } from \"@/layouts/content\";\nimport { Sidebar } from \"@/layouts/sidebar\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport function Panes() {\n const { activeTab, sidebarExpanded } = useHandbookContext();\n const paneLayout = useContext(PaneLayoutContext);\n\n const hasContent = isDefined(activeTab);\n\n if (paneLayout?.collapsed === true) {\n return sidebarExpanded || !hasContent ? <Sidebar /> : <Content />;\n }\n\n return (\n <>\n <Sidebar />\n {hasContent && <Content />}\n </>\n );\n}\n","import { useTheme_v2 } from \"@sanity/ui\";\nimport { useState } from \"react\";\nimport type { Tool } from \"sanity\";\nimport { PaneLayout } from \"sanity/structure\";\n\nimport { toolMinimumWidth } from \"@/config/layout\";\nimport { HandbookProvider } from \"@/contexts/handbook\";\nimport type { HandbookProviderConfig } from \"@/contexts/handbook\";\nimport { Panes } from \"@/layouts/panes\";\nimport { isDefined } from \"@/lib/utils\";\n\nexport interface HandbookToolProps {\n tool: Tool<HandbookProviderConfig>;\n}\n\nexport function HandbookTool({ tool: { options } }: HandbookToolProps) {\n const { media } = useTheme_v2();\n const [layoutCollapsed, setLayoutCollapsed] = useState(false);\n\n function handleCollapse() {\n setLayoutCollapsed(true);\n }\n\n function handleExpand() {\n setLayoutCollapsed(false);\n }\n\n if (!isDefined(options)) return null;\n\n return (\n <HandbookProvider {...options}>\n <PaneLayout\n flex={1}\n height={layoutCollapsed ? undefined : \"fill\"}\n minWidth={media[1]}\n onCollapse={handleCollapse}\n onExpand={handleExpand}\n style={{ minHeight: \"100%\", minWidth: `${toolMinimumWidth}px` }}\n >\n <Panes />\n </PaneLayout>\n </HandbookProvider>\n );\n}\n","import { isDefined } from \"@/lib/utils\";\n\n/** Editors the plugin was configured with, so the Structure helper need not be handed them a second time. */\nlet configuredEditors: string[] | undefined = undefined;\n\n/**\n * Records the editors a plugin instance was configured with. A Studio running more than one workspace\n * keeps only the list from the workspace configured last, so those cases pass the list explicitly.\n *\n * @param editors - Email addresses permitted to edit Handbook documents.\n */\nexport function setConfiguredEditors(editors: string[] | undefined) {\n configuredEditors = editors;\n}\n\n/**\n * Checks whether an email address is permitted to edit, treating an absent list as unrestricted access.\n *\n * @param editors - Email addresses permitted to edit, defaulting to the configured list.\n * @param email - The email address to check.\n * @returns Whether the email is permitted to edit.\n */\nexport function isPermittedEditor(editors: string[] | undefined, email: string | undefined) {\n const permitted = editors ?? configuredEditors;\n\n if (!isDefined(permitted)) return true;\n if (!isDefined(email)) return false;\n\n return permitted.includes(email);\n}\n","import type { ComponentType } from \"react\";\nimport { definePlugin } from \"sanity\";\nimport type { DocumentDefinition, PortableTextObject, SchemaTypeDefinition } from \"sanity\";\n\nimport { defaultTitle, defaultUndocumentedFieldMessage } from \"@/config/defaults\";\nimport { documentTypes, singletonTypes } from \"@/config/documents\";\nimport type { HandbookProviderConfig } from \"@/contexts/handbook\";\nimport { BookTextIcon } from \"@/icons/book-text\";\nimport { HandbookTool } from \"@/layouts/tool\";\nimport { isPermittedEditor, setConfiguredEditors } from \"@/lib/editors\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport { calloutType } from \"@/schemas/blocks/callout\";\nimport { codeType } from \"@/schemas/blocks/code\";\nimport { horizontalRuleType } from \"@/schemas/blocks/horizontal-rule\";\nimport { imageType } from \"@/schemas/blocks/image\";\nimport { videoType } from \"@/schemas/blocks/video\";\nimport { createGuideType } from \"@/schemas/types/guide\";\nimport { handbookType } from \"@/schemas/types/handbook\";\n\ndeclare module \"@sanity/types\" {\n interface FieldDefinitionBase {\n handbook?: SanityHandbookMetadata;\n }\n\n // oxlint-disable-next-line no-shadow -- Module augmentation intentionally redeclares the imported type.\n interface DocumentDefinition {\n handbook?: SanityHandbookMetadata;\n }\n}\n\n/**\n * Documentation a schema author attaches to a field or document, shown wherever the Handbook renders it.\n *\n * @public\n */\nexport interface SanityHandbookMetadata {\n /** Display title override for the field or document. */\n title?: string;\n /** Description shown beneath the field or document heading. */\n description?: string;\n /** Illustrative example value for the field. */\n example?: string;\n /** Helpful tip displayed as a popover hint. */\n tip?: string;\n /** Informational note displayed as a popover hint. */\n info?: string;\n /** Warning displayed as a popover hint. */\n caution?: string;\n}\n\n/**\n * A named part a set of document types plays in the content model, shown as one sidebar section.\n *\n * @public\n */\nexport interface SanityHandbookDocumentRole {\n /** Display title for the document role. */\n title: string;\n /** Brief description of the role's purpose. */\n description?: string;\n /** Document definitions filling this role. */\n documents: DocumentDefinition[];\n}\n\n/**\n * A Portable Text block a consumer adds to guide content, pairing its schema with how it renders.\n *\n * @public\n */\nexport interface SanityHandbookBlockDefinition {\n /** Sanity schema type definition for the custom block. */\n schema: SchemaTypeDefinition;\n /** React component for rendering the block in the Handbook viewer. */\n component: ComponentType<{ value: PortableTextObject }>;\n}\n\n/**\n * Everything the plugin accepts, of which only the document roles are required.\n *\n * @public\n */\nexport interface SanityHandbookConfig {\n /** Title shown in the Studio tool navigation. */\n title?: string;\n /** Heading displayed at the top of the sidebar. */\n sidebarTitle?: string;\n /** Document roles, each shown as a labelled section in the sidebar. */\n roles: SanityHandbookDocumentRole[];\n /** Custom Portable Text block definitions for guide content. */\n blocks?: SanityHandbookBlockDefinition[];\n /** Email addresses permitted to edit Handbook documents. */\n editors?: string[];\n /** Fallback message shown when a field has no description. */\n undocumentedFieldMessage?: string;\n}\n\n/**\n * Creates a Handbook tool for Sanity Studio, generating documentation from document type schemas\n * alongside the Portable Text guides authored in the dataset.\n *\n * @param config - Plugin configuration.\n * @returns Sanity plugin definition.\n * @public\n */\nexport const handbookPlugin = definePlugin<SanityHandbookConfig>((config) => {\n const { title, sidebarTitle, roles, blocks, editors, undocumentedFieldMessage } = config;\n\n setConfiguredEditors(editors);\n\n const resolved: HandbookProviderConfig = {\n sidebarTitle: sidebarTitle ?? defaultTitle,\n roles,\n blocks: blocks ?? [],\n undocumentedFieldMessage: undocumentedFieldMessage ?? defaultUndocumentedFieldMessage,\n };\n\n const guideType = createGuideType(resolved.blocks);\n\n return {\n name: \"@driftime/sanity-plugin-handbook\",\n schema: {\n types: [\n handbookType,\n guideType,\n imageType,\n videoType,\n codeType,\n calloutType,\n horizontalRuleType,\n ...resolved.blocks.map((block) => block.schema),\n ],\n },\n document: {\n newDocumentOptions: (templateItems, { creationContext, currentUser }) => {\n if (creationContext.type !== \"global\" && creationContext.type !== \"structure\") {\n return templateItems;\n }\n\n const hiddenTypes = isPermittedEditor(editors, currentUser?.email) ? singletonTypes : documentTypes;\n\n return templateItems.filter(\n ({ templateId }) =>\n ![...hiddenTypes].some((type) => templateId === type || templateId.startsWith(`${type}-`)),\n );\n },\n actions: (actionComponents, { schemaType }) => {\n if (singletonTypes.has(schemaType)) {\n return actionComponents.filter(({ action }) => ![\"delete\", \"duplicate\", \"unpublish\"].includes(action ?? \"\"));\n }\n\n return actionComponents;\n },\n },\n tools: [\n {\n name: \"handbook\",\n title: title ?? defaultTitle,\n icon: createSanityIcon(BookTextIcon),\n component: HandbookTool,\n options: resolved,\n },\n ],\n };\n});\n","import type { CurrentUser } from \"sanity\";\nimport type { StructureBuilder } from \"sanity/structure\";\n\nimport { BookOpenTextIcon } from \"@/icons/book-open-text\";\nimport { BookTextIcon } from \"@/icons/book-text\";\nimport { isPermittedEditor } from \"@/lib/editors\";\nimport { createSanityIcon } from \"@/lib/icons\";\nimport { guideTypeName } from \"@/schemas/types/guide\";\nimport { handbookTypeName } from \"@/schemas/types/handbook\";\n\n/**\n * Creates the Structure tool items for Handbook documents, yielding nothing when the current user is\n * not permitted to edit them.\n *\n * @param structureBuilder - The Sanity Structure builder instance.\n * @param context - The Structure context carrying the current user.\n * @param editors - Email addresses permitted to edit, defaulting to the configured list.\n * @returns The list items for the Handbook singleton and the guides list.\n * @public\n */\nexport function handbookStructure(\n structureBuilder: StructureBuilder,\n context: { currentUser: CurrentUser | null },\n editors?: string[],\n) {\n if (!isPermittedEditor(editors, context.currentUser?.email)) return [];\n\n const { listItem, document, documentTypeList } = structureBuilder;\n\n return [\n listItem()\n .title(\"Handbook\")\n .icon(createSanityIcon(BookTextIcon))\n .child(document().id(handbookTypeName).schemaType(handbookTypeName).title(\"Handbook\")),\n listItem()\n .title(\"Handbook Guides\")\n .icon(createSanityIcon(BookOpenTextIcon))\n .child(documentTypeList(guideTypeName).title(\"Handbook Guides\")),\n ];\n}\n","import { useCurrentUser } from \"sanity\";\n\nimport { isPermittedEditor } from \"@/lib/editors\";\n\n/**\n * Checks whether the current user is permitted to edit Handbook content, treating an absent list as\n * unrestricted access.\n *\n * @param editors - Email addresses permitted to edit, defaulting to the configured list.\n * @returns Whether the current user can edit Handbook documents.\n * @public\n */\nexport function useIsHandbookEditor(editors?: string[]) {\n const user = useCurrentUser();\n\n return isPermittedEditor(editors, user?.email);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["ComponentProps","ComponentType","createElement","defaultIconProps","width","height","strokeWidth","createSanityIcon","icon","props","Icon","SanityIcon","isDevelopment","process","env","isDevelopment","prefixStyle","createLogger","name","prefix","format","message","info","console","warn","error","createLogger","pluginName","logger","apiVersion","defaultTitle","defaultDocumentTitle","defaultUndocumentedFieldMessage","KeyedSegment","PortableTextBlock","PortableTextObject","PortableTextSpan","PortableTextTextBlock","SanityDocument","Strict","T","K","SanityKeyedArray","SanityHandbookGuide","_type","guideTypeName","title","description","content","SanityHandbookGuideGroup","guides","SanityHandbook","handbookTypeName","groups","SanityHandbookImage","imageTypeName","asset","url","caption","alt","SanityHandbookVideo","videoTypeName","SanityHandbookCode","codeTypeName","code","language","SanityHandbookCalloutVariant","SanityHandbookCallout","calloutTypeName","variant","body","SanityHandbookHorizontalRule","horizontalRuleTypeName","SanityHandbookLink","href","guideTypeName","handbookTypeName","singletonTypes","Set","documentTypes","ComponentProps","BookTextIconProps","BookTextIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","_c","Nullable","T","isDefined","value","undefined","trim","Array","isArray","some","element","prototype","Reflect","getPrototypeOf","Object","keys","length","convertCase","format","words","replaceAll","toLowerCase","_match","character","toUpperCase","isRecord","Record","readPath","path","current","segment","sidebarWidth","sidebarMinimumWidth","sidebarMaximumWidth","contentMinimumWidth","contentFlex","collapsedPaneWidth","sidebarItemHeight","toolMinimumWidth","contentWidth","contentPaddingInline","contentPaddingBlockStart","contentPaddingBlockEnd","contentSpacing","section","paragraph","heading","media","callout","blockquote","list","nestedList","rule","imageTypeName","videoTypeName","assetUrlFragment","guideContentFragment","guideFragment","SanityClient","TypedQuery","__result","T","defineTypedQuery","query","fetchQuery","client","fetch","undefined","guideFragment","defineTypedQuery","SanityHandbook","SanityHandbookGuide","guideTypeName","handbookTypeName","handbookQuery","handbookDocumentsQuery","useEffect","useState","useClient","apiVersion","handbookDocumentsQuery","handbookQuery","fetchQuery","SanityHandbook","useHandbookDocument","$","_c","t0","Symbol","for","client","handbook","setHandbook","undefined","loading","setLoading","t1","t2","fetchHandbook","subscription","listen","subscribe","unsubscribe","t3","_c","isDefined","createContext","useContext","useState","ReactNode","logger","useHandbookDocument","SanityHandbookBlockDefinition","SanityHandbookDocumentRole","SanityHandbook","HandbookProviderConfig","sidebarTitle","roles","blocks","undocumentedFieldMessage","HandbookContextValues","activeTab","sidebarExpanded","loading","handbook","setActiveTab","id","setSidebarExpanded","expanded","HandbookProviderProps","children","HandbookContext","undefined","useHandbookContext","handbookContext","Error","format","HandbookProvider","t0","$","_c","t1","t2","_c","isDefined","Box","Card","Flex","Layer","LayerProvider","Text","useElementSize","useTheme_v2","useContext","ComponentProps","ReactNode","PaneContext","collapsedPaneWidth","PaneHeaderProps","title","backButton","PaneHeader","t0","$","_c","props","style","color","pane","paneSize","rootElement","collapsed","isLast","paneHeight","border","height","collapsedWidth","window","innerHeight","bg","fg","selectable","default","enabled","t1","handleTitleClick","collapse","t2","handleLayoutClick","expand","t3","undefined","t4","lineHeight","position","top","t5","t6","t7","t8","width","transform","transformOrigin","t9","t10","t11","t12","backgroundColor","minWidth","t13","cursor","outline","t14","t15","t16","t17","t18","t19","_c","isDefined","ArrowLeftIcon","Box","Button","Heading","Stack","Text","useContext","ComponentProps","ReactNode","PaneLayoutContext","PaneContent","PaneHeader","contentPaddingBlockEnd","contentPaddingBlockStart","contentPaddingInline","contentWidth","useHandbookContext","ContentPanelProps","Omit","id","title","description","children","ContentPanel","t0","$","_c","props","setSidebarExpanded","paneLayout","t1","collapsed","t2","t3","t4","Symbol","for","maxWidth","boxSizing","marginInline","paddingInline","paddingBlockStart","paddingBlockEnd","t5","t6","t7","t8","t9","t10","_c","Box","Button","Stack","Text","useClickOutsideEvent","Popover","useRef","ComponentProps","ReactNode","FieldHintProps","Omit","label","icon","open","children","onOpen","onClose","FieldHint","t0","$","_c","props","buttonReference","popoverReference","t1","Symbol","for","current","undefined","t2","maxWidth","t3","t4","t5","t6","t7","event","pointerType","t8","event_0","t9","t10","_c","ComponentProps","InfoIconProps","InfoIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","_c","ComponentProps","LightbulbIconProps","LightbulbIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","_c","ComponentProps","TriangleAlertIconProps","TriangleAlertIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","_c","ComponentProps","ComponentType","InfoIcon","LightbulbIcon","TriangleAlertIcon","SanityHandbookMetadata","HintKind","name","Pick","label","icon","hintKinds","defaultIconProps","isDefined","Flex","FlexProps","useState","FieldHint","hintKinds","SanityHandbookMetadata","FieldHintsProps","Pick","FieldHints","t0","$","_c","caution","info","props","tip","openHint","setOpenHint","undefined","T0","t1","t2","t3","t4","hints","t5","Symbol","for","closeHint","flatMap","t6","name","label","icon","Icon","hint","_c","createSanityIcon","convertCase","ComponentProps","ComponentType","ReactNode","resolveTitle","type","name","title","handbook","resolveDescription","description","undefined","resolveIcon","icon","isDefined","isRecord","readPath","FieldDefinition","Schema","CompiledField","name","type","title","description","fields","of","handbook","NormalizedField","opaqueTypes","Set","inheritedFieldNames","Partial","Record","block","file","geopoint","image","slug","isCompiledField","value","hasFieldsArray","Array","isArray","hasOfArray","getTypeName","typeName","undefined","getParentTypeName","resolvedType","parentName","String","normalizeField","field","visited","result","has","shouldTrack","next","fieldSource","ofSource","map","subfield","member","resolveCustomFields","inherited","customFields","filter","resolveNormalizedFields","items","normalized","item","resolveNormalizedMembers","members","resolveParentName","schema","direct","get","resolveFields","length","memberType","getSubfields","directFields","convertCase","isDefined","ChevronDownIcon","ChevronRightIcon","Box","Card","Flex","Stack","Text","StackProps","useState","FieldDefinition","useSchema","FieldHints","useHandbookContext","resolveDescription","resolveTitle","NormalizedField","getSubfields","DocumentedFieldProps","field","ancestors","Set","noAncestors","DocumentedField","t0","$","_c","props","t1","undefined","schema","undocumentedFieldMessage","expanded","setExpanded","t2","effectiveTitle","t3","effectiveDescription","caution","example","info","t4","tip","handbook","hasHints","t5","type","has","isCycle","t6","subfields","hasSubfields","t7","t8","Symbol","for","marginTop","t9","t10","t11","t12","t13","t14","fontStyle","t15","t16","textAlign","border","cursor","length","marginBottom","paddingLeft","borderLeft","map","subfield","name","_c","DocumentedField","contentSpacing","resolveDescription","resolveIcon","resolveTitle","SanityHandbookDocumentRole","documentTypesSections","roles","map","title","documents","entries","document","id","name","description","icon","render","display","flexDirection","gap","section","fields","field","ComponentProps","LayoutGridIconProps","LayoutGridIcon","props","$","_c","t0","t1","t2","t3","Symbol","for","t4","_c","isDefined","ChevronRightIcon","Box","Card","Flex","Stack","Text","contentSpacing","useHandbookContext","resolveDescription","resolveIcon","resolveTitle","DocumentTypesOverview","$","_c","roles","setActiveTab","setSidebarExpanded","t0","Symbol","for","display","flexDirection","gap","section","t1","t2","role","title","description","documents","map","document","Icon","documentDescription","name","width","marginLeft","textAlign","border","cursor","height","color","opacity","_c","defaultIconProps","Flex","Stack","Text","hintKinds","contentSpacing","hintDescriptions","tip","info","caution","Record","HowToUse","$","_c","t0","Symbol","for","display","flexDirection","gap","section","t1","t2","t3","t4","t5","map","_temp","t6","t7","name","icon","Icon","fontSize","color","_c","_temp","createSanityIcon","BookTextIcon","LayoutGridIcon","DocumentTypesOverview","HowToUse","gettingStartedSections","title","entries","id","description","icon","render","defaultIconProps","Box","Card","Flex","Text","CardProps","CardTone","ComponentProps","ComponentType","ReactNode","InfoIcon","LightbulbIcon","TriangleAlertIcon","SanityHandbookCalloutVariant","CalloutVariantStyle","icon","tone","CalloutContentProps","Omit","variant","children","presentation","Record","tip","info","warning","CalloutContent","t0","$","_c","props","Icon","t1","Symbol","for","marginTop","fontSize","color","t2","t3","t4","t5","t6","_c","ComponentProps","PortableCodeProps","PortableCode","t0","$","_c","props","style","t1","paddingBlock","paddingInline","fontSize","backgroundColor","borderRadius","t2","_c","ComponentProps","PortableLinkProps","PortableLink","t0","$","_c","children","props","style","t1","color","t2","_c","PortableText","PortableTextComponents","PortableTextMarkComponentProps","ComponentProps","CalloutContent","PortableCode","PortableLink","contentSpacing","SanityHandbookCallout","SanityHandbookLink","CalloutBlockProps","Omit","value","components","block","normal","children","marks","code","link","href","CalloutBlock","t0","$","_c","props","style","t1","marginBlock","callout","t2","body","t3","variant","components","_c","Card","CardProps","Code","CodeContentProps","code","language","CodeContent","t0","$","_c","props","style","t1","overflowX","t2","t3","_c","isDefined","ComponentProps","CodeContent","contentSpacing","SanityHandbookCode","CodeBlockProps","Omit","value","CodeBlock","t0","$","_c","props","style","code","t1","marginBlock","media","t2","language","_c","ComponentProps","HorizontalRuleContentProps","HorizontalRuleContent","t0","$","_c","props","style","t1","border","borderTop","t2","_c","ComponentProps","HorizontalRuleContent","contentSpacing","SanityHandbookHorizontalRule","HorizontalRuleBlockProps","value","HorizontalRuleBlock","t0","$","_c","props","style","_value","t1","t2","marginBlock","rule","_c","Box","Text","BoxProps","CaptionProps","children","Caption","t0","$","_c","props","t1","Symbol","for","fontStyle","t2","t3","_c","isDefined","ComponentProps","Caption","ImageContentProps","url","alt","caption","ImageContent","t0","$","_c","props","t1","t2","Symbol","for","display","maxWidth","borderRadius","t3","t4","t5","_c","isDefined","ComponentProps","ImageContent","contentSpacing","SanityHandbookImage","ImageBlockProps","Omit","value","ImageBlock","t0","$","_c","props","style","asset","url","t1","marginBlock","media","t2","alt","caption","_c","isDefined","ComponentProps","Caption","VideoContentProps","url","caption","VideoContent","t0","$","_c","props","t1","Symbol","for","display","maxWidth","borderRadius","WebkitTransform","t2","t3","t4","t5","t6","_c","isDefined","ComponentProps","VideoContent","contentSpacing","SanityHandbookVideo","VideoBlockProps","Omit","value","VideoBlock","t0","$","_c","props","style","asset","url","t1","marginBlock","media","t2","caption","_c","Box","Text","BoxProps","PortableBlockquoteProps","muted","PortableBlockquote","t0","$","_c","children","props","style","t1","borderLeft","t2","Symbol","for","fontStyle","t3","t4","_c","Text","TextProps","PortableHeadingProps","Omit","PortableHeading","props","$","_c","t0","_c","CSSProperties","ComponentProps","PortableListProps","Omit","ordered","PortableList","t0","$","_c","props","style","t1","undefined","t2","display","flexDirection","gap","margin","paddingLeft","listStyle","t3","_c","Text","TextProps","PortableParagraphProps","PortableParagraph","props","$","_c","t0","_c","PortableText","PortableTextReact","PortableTextComponentProps","PortableTextComponents","PortableTextMarkComponentProps","PortableTextTypeComponent","PortableTextTypeComponentProps","ComponentProps","ComponentType","PortableTextBlock","PortableTextListBlock","PortableTextObject","CalloutBlock","CodeBlock","HorizontalRuleBlock","ImageBlock","VideoBlock","PortableBlockquote","PortableCode","PortableHeading","PortableLink","PortableList","PortableParagraph","contentSpacing","useHandbookContext","SanityHandbookLink","SanityKeyedArray","calloutTypeName","codeTypeName","horizontalRuleTypeName","imageTypeName","videoTypeName","listSpacing","level","nestedList","list","components","block","h2","children","marginBlockStart","heading","marginBlockEnd","normal","marginBlock","paragraph","blockquote","bullet","value","number","marks","code","link","href","blockRenderer","Component","Value","Block","PortableTextProps","t0","$","_c","props","blocks","t1","Symbol","for","t2","t3","t4","t5","types","schema","name","component","t6","t7","t8","PortableText","_c","PortableTextReact","ComponentProps","BookOpenTextIconProps","BookOpenTextIcon","props","$","_c","t0","t1","t2","t3","t4","t5","Symbol","for","t6","_c","createSanityIcon","PortableText","BookOpenTextIcon","SanityHandbook","guidesSections","handbook","groups","map","title","guides","entries","guide","id","_key","description","icon","render","content","PortableText","isDefined","ComponentType","ReactNode","useHandbookContext","documentTypesSections","gettingStartedSections","guidesSections","Entry","id","title","description","icon","render","Section","entries","useSections","$","_c","roles","handbook","loading","t0","_c","isDefined","ComponentProps","Pane","ContentPanel","contentFlex","contentMinimumWidth","useHandbookContext","useSections","ContentProps","Omit","Content","props","$","_c","activeTab","sections","T0","t0","t1","t2","t3","t4","t5","t6","id","entry","flatMap","_temp","find","title","description","render","section","entries","_c","_temp","Box","Card","Text","ComponentProps","SidebarHeadingProps","title","SidebarHeading","t0","$","_c","props","t1","Symbol","for","cursor","outline","t2","t3","_c","ChevronRightIcon","Box","Text","CSSProperties","ComponentProps","ComponentType","PreviewCard","SanityDefaultPreview","useHandbookContext","SidebarTabProps","Omit","id","label","icon","style","SidebarTab","t0","$","_c","Icon","props","activeTab","setActiveTab","setSidebarExpanded","selected","t1","t2","cursor","t3","t4","Symbol","for","opacity","t5","t6","t7","_c","ComponentProps","ComponentType","CommandList","Pane","PaneContent","PaneHeader","SidebarHeading","SidebarTab","sidebarItemHeight","sidebarMaximumWidth","sidebarMinimumWidth","sidebarWidth","useHandbookContext","useSections","SidebarHeadingItem","type","title","SidebarTabItem","id","label","icon","SidebarItem","renderItem","item","SidebarProps","Omit","Sidebar","props","$","_c","sidebarTitle","sections","t0","flatMap","_temp2","items","t1","getItemDisabled","virtualIndex","t2","t3","t4","entries","map","_temp","entry","_c","_temp2","_temp","isDefined","useContext","PaneLayoutContext","useHandbookContext","Content","Sidebar","Panes","$","_c","activeTab","sidebarExpanded","paneLayout","t0","hasContent","collapsed","t1","Symbol","for","t2","t3","_c","isDefined","useTheme_v2","useState","Tool","PaneLayout","toolMinimumWidth","HandbookProvider","HandbookProviderConfig","Panes","HandbookToolProps","tool","HandbookTool","t0","$","_c","t1","options","media","layoutCollapsed","setLayoutCollapsed","t2","Symbol","for","handleCollapse","t3","handleExpand","t4","undefined","t5","t6","minHeight","minWidth","t7","t8","_c","isDefined","configuredEditors","undefined","setConfiguredEditors","editors","isPermittedEditor","email","permitted","includes","Stack","PreviewProps","CalloutContent","SanityHandbookCallout","SanityHandbookCalloutVariant","CalloutPreviewProps","variant","body","CalloutPreview","t0","$","_c","t1","t2","map","_temp2","t3","t4","_key","children","whiteSpace","_temp","join","child","text","_c","BlockDecoratorProps","PortableCode","CodeDecorator","t0","$","_c","children","t1","_c","BlockStyleProps","PortableBlockquote","PortableHeading","PortableParagraph","ParagraphStyle","t0","$","_c","children","t1","HeadingStyle","BlockquoteStyle","_c","ComponentProps","MessageCircleIconProps","MessageCircleIcon","props","$","_c","t0","Symbol","for","t1","_c","ComponentProps","LinkIconProps","LinkIcon","props","$","_c","t0","t1","Symbol","for","t2","_c","createSanityIcon","defineArrayMember","defineField","LinkIcon","SanityHandbookLink","linkAnnotation","name","type","description","icon","preview","select","href","prepare","selection","title","fields","validation","rule","uri","scheme","createSanityIcon","defineArrayMember","defineField","defineType","CalloutPreview","CodeDecorator","ParagraphStyle","MessageCircleIcon","linkAnnotation","SanityHandbookCallout","SanityHandbookCalloutVariant","calloutTypeName","calloutType","name","type","title","description","icon","components","preview","select","variant","body","prepare","selection","fields","initialValue","validation","rule","required","options","list","value","layout","direction","of","styles","component","lists","marks","decorators","annotations","isDefined","PreviewProps","CodeContent","CodePreviewProps","code","language","CodePreview","t0","$","_c","t1","_c","ComponentProps","CodeIconProps","CodeIcon","props","$","_c","t0","t1","Symbol","for","t2","_c","createSanityIcon","defineField","defineType","CodePreview","CodeIcon","SanityHandbookCode","codeTypeName","codeType","name","type","title","description","icon","components","preview","select","code","language","fields","options","list","value","PreviewProps","HorizontalRuleContent","HorizontalRulePreviewProps","HorizontalRulePreview","_props","$","_c","t0","Symbol","for","marginBlock","_c","ComponentProps","SeparatorHorizontalIconProps","SeparatorHorizontalIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","_c","createSanityIcon","defineField","defineType","HorizontalRulePreview","SeparatorHorizontalIcon","SanityHandbookHorizontalRule","horizontalRuleTypeName","horizontalRuleType","name","type","title","description","icon","components","preview","prepare","fields","hidden","isDefined","PreviewProps","ImageContent","ImagePreviewProps","url","alt","caption","ImagePreview","t0","$","_c","t1","Symbol","for","padding","t2","_c","ComponentProps","ImageIconProps","ImageIcon","props","$","_c","t0","t1","t2","Symbol","for","t3","_c","createSanityIcon","defineField","defineType","ImagePreview","ImageIcon","SanityHandbookImage","imageTypeName","imageType","name","type","title","description","icon","components","preview","select","caption","alt","url","fields","options","hotspot","isDefined","PreviewProps","VideoContent","VideoPreviewProps","url","caption","VideoPreview","t0","$","_c","t1","Symbol","for","padding","t2","_c","ComponentProps","FilmIconProps","FilmIcon","props","$","_c","t0","t1","t2","t3","t4","t5","t6","t7","Symbol","for","t8","_c","createSanityIcon","defineField","defineType","VideoPreview","FilmIcon","SanityHandbookVideo","videoTypeName","videoType","name","type","title","description","icon","components","preview","select","caption","url","fields","options","accept","Text","BlockListItemProps","ListItemStyle","t0","$","_c","children","t1","Symbol","for","marginTop","t2","_c","defineArrayMember","defineField","CodeDecorator","ListItemStyle","BlockquoteStyle","HeadingStyle","ParagraphStyle","SanityHandbookBlockDefinition","linkAnnotation","SanityHandbookGuide","calloutTypeName","codeTypeName","horizontalRuleTypeName","imageTypeName","videoTypeName","createGuideContentField","customBlocks","name","type","description","of","styles","title","value","component","lists","marks","decorators","annotations","map","block","schema","createSanityIcon","defineField","defineType","defaultDocumentTitle","BookOpenTextIcon","SanityHandbookBlockDefinition","createGuideContentField","SanityHandbookGuide","guideTypeName","createGuideType","customBlocks","name","type","title","description","icon","preview","select","prepare","selection","subtitle","fields","validation","rule","required","ComponentProps","ListPlusIconProps","ListPlusIcon","props","$","_c","t0","t1","t2","t3","t4","Symbol","for","t5","_c","createSanityIcon","isDefined","defineArrayMember","defineField","defineType","BookTextIcon","ListPlusIcon","SanityHandbook","SanityHandbookGuideGroup","guideTypeName","handbookTypeName","handbookType","name","type","title","description","icon","preview","prepare","fields","of","validation","rule","required","to","select","guide0","guide1","guide2","selection","all","filter","guide","shown","slice","hasMore","formatSubtitle","join","subtitle","createSanityIcon","ComponentType","definePlugin","DocumentDefinition","PortableTextObject","SchemaTypeDefinition","defaultTitle","defaultUndocumentedFieldMessage","pluginName","documentTypes","singletonTypes","HandbookProviderConfig","BookTextIcon","HandbookTool","isPermittedEditor","setConfiguredEditors","calloutType","codeType","horizontalRuleType","imageType","videoType","createGuideType","handbookType","FieldDefinitionBase","handbook","SanityHandbookMetadata","title","description","example","tip","info","caution","SanityHandbookDocumentRole","documents","SanityHandbookBlockDefinition","schema","component","value","SanityHandbookConfig","sidebarTitle","roles","blocks","editors","undocumentedFieldMessage","handbookPlugin","config","resolved","guideType","name","types","map","block","document","newDocumentOptions","templateItems","creationContext","currentUser","type","hiddenTypes","email","filter","templateId","some","startsWith","actions","actionComponents","schemaType","has","action","includes","tools","icon","options","createSanityIcon","CurrentUser","StructureBuilder","BookOpenTextIcon","BookTextIcon","isPermittedEditor","guideTypeName","handbookTypeName","handbookStructure","structureBuilder","context","currentUser","editors","email","listItem","document","documentTypeList","title","icon","child","id","schemaType","defaultOrdering","field","direction","useCurrentUser","isPermittedEditor","useIsHandbookEditor","editors","$","_c","user","t0","email","t1","_c","\"NODE_ENV\"","\"type\"","\"fields\"","\"of\""],"sources":["../../@repo/lib/icons.ts","../../@repo/lib/environment.ts","../../@repo/lib/logger.ts","../src/config/defaults.ts","../src/types.ts","../src/config/documents.ts","../src/icons/book-text.tsx","../../@repo/lib/utils.ts","../src/config/layout.ts","../src/groq/fragments.ts","../src/lib/groq.ts","../src/groq/documents.ts","../src/hooks/use-handbook-document.ts","../src/contexts/handbook.tsx","../src/components/pane-header.tsx","../src/components/content-panel.tsx","../src/components/documentation/hint.tsx","../src/icons/info.tsx","../src/icons/lightbulb.tsx","../src/icons/triangle-alert.tsx","../src/config/hints.ts","../src/components/documentation/hints.tsx","../src/lib/display.ts","../src/lib/schema.ts","../src/components/documentation/field.tsx","../src/sections/document-types.tsx","../src/icons/layout-grid.tsx","../src/pages/document-types-overview.tsx","../src/pages/how-to-use.tsx","../src/sections/getting-started.tsx","../src/components/blocks/callout/content.tsx","../src/components/content/portable/code.tsx","../src/components/content/portable/link.tsx","../src/components/blocks/callout/block.tsx","../src/components/blocks/code/content.tsx","../src/components/blocks/code/block.tsx","../src/components/blocks/horizontal-rule/content.tsx","../src/components/blocks/horizontal-rule/block.tsx","../src/components/caption.tsx","../src/components/blocks/image/content.tsx","../src/components/blocks/image/block.tsx","../src/components/blocks/video/content.tsx","../src/components/blocks/video/block.tsx","../src/components/content/portable/blockquote.tsx","../src/components/content/portable/heading.tsx","../src/components/content/portable/list.tsx","../src/components/content/portable/paragraph.tsx","../src/components/content/portable-text.tsx","../src/icons/book-open-text.tsx","../src/sections/guides.tsx","../src/hooks/use-sections.ts","../src/layouts/content.tsx","../src/components/sidebar/heading.tsx","../src/components/sidebar/tab.tsx","../src/layouts/sidebar.tsx","../src/layouts/panes.tsx","../src/layouts/tool.tsx","../src/lib/editors.ts","../src/components/blocks/callout/preview.tsx","../src/components/decorators.tsx","../src/components/styles.tsx","../src/icons/message-circle.tsx","../src/icons/link.tsx","../src/schemas/annotations/link.ts","../src/schemas/blocks/callout.ts","../src/components/blocks/code/preview.tsx","../src/icons/code.tsx","../src/schemas/blocks/code.ts","../src/components/blocks/horizontal-rule/preview.tsx","../src/icons/separator-horizontal.tsx","../src/schemas/blocks/horizontal-rule.ts","../src/components/blocks/image/preview.tsx","../src/icons/image.tsx","../src/schemas/blocks/image.ts","../src/components/blocks/video/preview.tsx","../src/icons/film.tsx","../src/schemas/blocks/video.ts","../src/components/lists.tsx","../src/schemas/fields/content.ts","../src/schemas/types/guide.ts","../src/icons/list-plus.tsx","../src/schemas/types/handbook.ts","../src/plugin.ts","../src/lib/structure.ts","../src/hooks/use-is-handbook-editor.ts"],"sourcesContent":["import type { ComponentProps, ComponentType } from \"react\";\nimport { createElement } from \"react\";\n\n/** Default props for the plugin's own icons. Icons from `@sanity/icons` already match the Studio. */\nexport const defaultIconProps: ComponentProps<\"svg\"> = { width: \"1em\", height: \"1em\", strokeWidth: 1.5 };\n\n/**\n * Wraps an SVG icon component for use in the Studio.\n *\n * @param icon - The icon to wrap.\n * @param props - Props that override the Studio icon defaults.\n * @returns An icon component.\n */\nexport function createSanityIcon(icon: ComponentType<ComponentProps<\"svg\">>, props?: ComponentProps<\"svg\">) {\n const Icon = icon;\n\n function SanityIcon() {\n return createElement(Icon, { ...defaultIconProps, ...props });\n }\n\n return SanityIcon;\n}\n","/** Whether this is a development build, the only kind in which the plugin logs. */\nexport const isDevelopment = process.env[\"NODE_ENV\"] === \"development\";\n","import { isDevelopment } from \"./environment\";\n\n/** Console style for the prefix, in the blue the Studio uses for its own messages. */\nconst prefixStyle = \"color: #2276fc\";\n\n/**\n * Creates a logger that prefixes messages with the plugin's name and only logs in development builds.\n * Browser consoles show the prefix in blue.\n *\n * @param name - The package name to prefix messages with.\n * @returns Functions that log progress, a warning, or an error, or format a message to throw.\n */\nexport function createLogger(name: string) {\n const prefix = `[${name}]`;\n\n /**\n * Prefixes a message with the package name.\n *\n * @param message - The message.\n * @returns The prefixed message.\n */\n function format(message: string) {\n return `${prefix} ${message}`;\n }\n\n return {\n /**\n * Logs progress worth seeing, such as what a build step did, in development builds only.\n *\n * @param message - What happened.\n */\n info(message: string) {\n if (isDevelopment) console.info(`%c${prefix}%c ${message}`, prefixStyle, \"\");\n },\n /**\n * Logs a warning about something the plugin recovered from, in development builds only.\n *\n * @param message - What happened and what to do about it.\n */\n warn(message: string) {\n if (isDevelopment) console.warn(`%c${prefix}%c ${message}`, prefixStyle, \"\");\n },\n /**\n * Logs an error the plugin couldn't recover from, in development builds only.\n *\n * @param message - What went wrong and what to do about it.\n */\n error(message: string) {\n if (isDevelopment) console.error(`%c${prefix}%c ${message}`, prefixStyle, \"\");\n },\n format,\n };\n}\n","import { createLogger } from \"@repo/lib/logger\";\n\n/** Package name, used as the prefix on every logged message. */\nexport const pluginName = \"@driftime/sanity-plugin-handbook\";\n\n/** The package's logger. */\nexport const logger = createLogger(pluginName);\n\n/** API version for the plugin's queries. */\nexport const apiVersion = \"2026-01-01\";\n\n/** Default title in the Studio's tool menu and at the top of the sidebar. */\nexport const defaultTitle = \"Handbook\";\n\n/** Title shown for documents without one. */\nexport const defaultDocumentTitle = \"Untitled\";\n\n/** Message shown for fields without a description. */\nexport const defaultUndocumentedFieldMessage =\n \"This field isn't documented yet. Ask your development team for guidance.\";\n","import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n SanityDocument,\n} from \"sanity\";\n\n/** Removes a type's index signatures, so a misspelt property is an error rather than `unknown`. */\nexport type Strict<T> = { [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K] };\n\n/** Array whose items carry the `_key` Sanity gives array members. */\nexport type SanityKeyedArray<T> = (KeyedSegment & T)[];\n\n/**\n * A Handbook guide, written in rich text and shown in the tool.\n *\n * @public\n */\nexport type SanityHandbookGuide = Strict<SanityDocument> & {\n _type: typeof guideTypeName;\n /** Guide title. */\n title: string;\n /** Short description below the guide heading. */\n description?: string;\n /** Portable Text content. */\n content: SanityKeyedArray<PortableTextBlock>;\n};\n\n/** Schema type name of the guide document. */\nexport const guideTypeName = \"handbook.guide\";\n\n/**\n * A group of guides in the sidebar, in order.\n *\n * @public\n */\nexport interface SanityHandbookGuideGroup {\n /** Group title in the sidebar. */\n title: string;\n /** Guides in the group, in order. */\n guides: SanityKeyedArray<SanityHandbookGuide>;\n}\n\n/**\n * The Handbook document, listing the guide groups in sidebar order.\n *\n * @public\n */\nexport type SanityHandbook = Strict<SanityDocument> & {\n _type: typeof handbookTypeName;\n /** Guide groups, in order. */\n groups: SanityKeyedArray<SanityHandbookGuideGroup>;\n};\n\n/** Schema type name of the Handbook document. */\nexport const handbookTypeName = \"handbook.handbook\";\n\n/**\n * An image in a guide, with its caption and alternative text.\n *\n * @public\n */\nexport type SanityHandbookImage = Strict<PortableTextObject> & {\n _type: typeof imageTypeName;\n /** Image asset, reduced by the query to its URL. */\n asset?: { url?: string };\n /** Text shown below the image. */\n caption?: string;\n /** Alternative text. */\n alt?: string;\n};\n\n/** Schema type name of the image block. */\nexport const imageTypeName = \"handbook.image\";\n\n/**\n * A video in a guide, with its caption.\n *\n * @public\n */\nexport type SanityHandbookVideo = Strict<PortableTextObject> & {\n _type: typeof videoTypeName;\n /** Video asset, reduced by the query to its URL. */\n asset?: { url?: string };\n /** Text shown below the video. */\n caption?: string;\n};\n\n/** Schema type name of the video block. */\nexport const videoTypeName = \"handbook.video\";\n\n/**\n * A code block, highlighted for its language.\n *\n * @public\n */\nexport type SanityHandbookCode = Strict<PortableTextObject> & {\n _type: typeof codeTypeName;\n /** Code to display. */\n code?: string;\n /** Language used for syntax highlighting. */\n language?: string;\n};\n\n/** Schema type name of the code block. */\nexport const codeTypeName = \"handbook.code\";\n\n/**\n * Kind of callout, which sets its icon and tone.\n *\n * @public\n */\nexport type SanityHandbookCalloutVariant = \"tip\" | \"info\" | \"warning\";\n\n/**\n * A highlighted message in a guide.\n *\n * @public\n */\nexport type SanityHandbookCallout = Strict<PortableTextObject> & {\n _type: typeof calloutTypeName;\n /** Kind of callout. */\n variant: SanityHandbookCalloutVariant;\n /** Portable Text inside the callout, without inline objects. */\n body: SanityKeyedArray<PortableTextTextBlock<PortableTextSpan>>;\n};\n\n/** Schema type name of the callout block. */\nexport const calloutTypeName = \"handbook.callout\";\n\n/**\n * A divider between sections of a guide.\n *\n * @public\n */\nexport type SanityHandbookHorizontalRule = Strict<PortableTextObject> & {\n _type: typeof horizontalRuleTypeName;\n};\n\n/** Schema type name of the horizontal rule block. */\nexport const horizontalRuleTypeName = \"handbook.horizontalRule\";\n\n/**\n * A link on a run of guide text.\n *\n * @public\n */\nexport type SanityHandbookLink = Strict<PortableTextObject> & {\n _type: \"link\";\n /** Web address the link points to. */\n href?: string;\n};\n","import { guideTypeName, handbookTypeName } from \"@/types\";\n\n/** Document types hidden from the create menu. */\nexport const singletonTypes = new Set<string>([handbookTypeName]);\n\n/** Every Handbook document type, hidden from the create menu for people who can't edit them. */\nexport const documentTypes = new Set<string>([handbookTypeName, guideTypeName]);\n","import type { ComponentProps } from \"react\";\n\nexport type BookTextIconProps = ComponentProps<\"svg\">;\n\nexport function BookTextIcon(props: BookTextIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\" />\n <path d=\"M8 11h8\" />\n <path d=\"M8 7h6\" />\n </svg>\n );\n}\n","/** A value that may be null or undefined. */\ntype Nullable<T> = T | null | undefined;\n\n/**\n * Checks whether a value is present. `false`, blank strings, and empty plain objects count as absent,\n * as does an array with no present elements.\n *\n * @param value - The value to check.\n * @returns True if the value is present.\n */\nexport function isDefined<T>(value: Nullable<T> | false): value is T {\n if (value === undefined || value === null || value === false) return false;\n if (typeof value === \"string\") return value.trim() !== \"\";\n if (Array.isArray(value)) return value.some((element) => isDefined(element));\n\n if (typeof value === \"object\") {\n const prototype = Reflect.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return true;\n\n return Object.keys(value).length > 0;\n }\n\n return true;\n}\n\n/**\n * Converts a string to another case.\n *\n * @param value - The string to convert.\n * @param format - The case to convert to.\n * @returns The converted string.\n */\nexport function convertCase(value: string, format: \"kebab\" | \"snake\" | \"camel\" | \"pascal\" | \"title\" | \"sentence\") {\n const words = value\n .replaceAll(/(?<lower>[a-z0-9])(?<upper>[A-Z])/gu, \"$<lower> $<upper>\")\n .replaceAll(/[-_\\s]+/gu, \" \")\n .trim()\n .toLowerCase();\n\n switch (format) {\n case \"kebab\": {\n return words.replaceAll(/\\s+/gu, \"-\");\n }\n case \"snake\": {\n return words.replaceAll(/\\s+/gu, \"_\");\n }\n case \"camel\": {\n return words.replaceAll(/\\s+(?<character>.)/gu, (_match, character: string) => character.toUpperCase());\n }\n case \"pascal\": {\n return words.replaceAll(/(?:^|\\s+)(?<character>.)/gu, (_match, character: string) => character.toUpperCase());\n }\n case \"title\": {\n return words.replaceAll(/\\b\\w/gu, (character) => character.toUpperCase());\n }\n case \"sentence\": {\n return words.replaceAll(/^(?<character>.)/gu, (character) => character.toUpperCase());\n }\n default: {\n return value;\n }\n }\n}\n\n/**\n * Checks whether a value is an object whose keys can be read.\n *\n * @param value - The value to check.\n * @returns True if the value is an object.\n */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\n/**\n * Reads a nested value by following a path of keys.\n *\n * @param value - The object to read from.\n * @param path - The keys to follow.\n * @returns The value, or undefined when the path doesn't exist.\n */\nexport function readPath(value: unknown, path: string[]) {\n let current: unknown = value;\n\n for (const segment of path) {\n if (!isRecord(current)) return undefined;\n\n current = current[segment];\n }\n\n return current;\n}\n","/** Default sidebar width in pixels, until it's resized. */\nexport const sidebarWidth = 350;\n\n/** Minimum sidebar width in pixels before it collapses to a vertical label. */\nexport const sidebarMinimumWidth = 320;\n\n/** Maximum sidebar width in pixels. */\nexport const sidebarMaximumWidth = 640;\n\n/** Minimum content pane width in pixels. */\nexport const contentMinimumWidth = 320;\n\n/** Share of the space the content pane takes relative to the sidebar. */\nexport const contentFlex = 2.5;\n\n/** Width in pixels of a pane collapsed to a vertical label. */\nexport const collapsedPaneWidth = 51;\n\n/** Estimated sidebar row height in pixels, corrected once rows are measured. */\nexport const sidebarItemHeight = 37;\n\n/** Minimum tool width in pixels before the Studio scrolls horizontally. */\nexport const toolMinimumWidth = 320;\n\n/** Maximum width in pixels of the text column in the content pane. */\nexport const contentWidth = 640;\n\n/** Space in pixels on either side of the text column. */\nexport const contentPaddingInline = 20;\n\n/** Space in pixels above a content panel's heading. */\nexport const contentPaddingBlockStart = 32;\n\n/** Space in pixels below a content panel's last element, so long content doesn't end at the pane's edge. */\nexport const contentPaddingBlockEnd = 220;\n\n/** Vertical spacing in pixels for guide content and content panels. */\nexport const contentSpacing = {\n section: 48,\n paragraph: 16,\n heading: 48,\n media: 24,\n callout: 32,\n blockquote: 32,\n list: 32,\n nestedList: 12,\n rule: 40,\n};\n","import { imageTypeName, videoTypeName } from \"@/types\";\n\n/** Expands an image or video block's asset to just its URL. */\nconst assetUrlFragment = `\"asset\": { \"url\": asset.asset->url }`;\n\n/** Expands the image and video blocks in guide content. */\nconst guideContentFragment = `\n _type == \"${imageTypeName}\" => { ..., ${assetUrlFragment} },\n _type == \"${videoTypeName}\" => { ..., ${assetUrlFragment} }\n`;\n\n/** Expands a guide reference, including the asset URLs in its content. */\nexport const guideFragment = `...@-> {\n ...,\n content[] { ..., ${guideContentFragment} }\n}`;\n","import type { SanityClient } from \"sanity\";\n\n/** GROQ query string that carries the type of its result. */\ntype TypedQuery<T> = string & { readonly __result?: T };\n\n/**\n * Defines a GROQ query typed with its result, so fetches infer the result type.\n *\n * @param query - The GROQ query.\n * @returns The query, typed with its result.\n */\nexport function defineTypedQuery<T>(query: string): TypedQuery<T> {\n return query;\n}\n\n/**\n * Runs a typed query, returning undefined instead of null when nothing matches.\n *\n * @param client - The Sanity client.\n * @param query - The typed query.\n * @returns The result, or undefined when nothing matches.\n */\nexport async function fetchQuery<T>(client: SanityClient, query: TypedQuery<T>) {\n return (await client.fetch<T | null>(query)) ?? undefined;\n}\n","import { guideFragment } from \"@/groq/fragments\";\nimport { defineTypedQuery } from \"@/lib/groq\";\nimport type { SanityHandbook, SanityHandbookGuide } from \"@/types\";\nimport { guideTypeName, handbookTypeName } from \"@/types\";\n\n/** Handbook document with its guide references expanded. */\nexport const handbookQuery = defineTypedQuery<SanityHandbook>(`\n *[_type == \"${handbookTypeName}\"][0] {\n ...,\n groups[] {\n ...,\n guides[] {\n ...,\n ${guideFragment}\n }\n }\n }\n`);\n\n/** Handbook and guide documents, listened to so the tool refetches when they change. */\nexport const handbookDocumentsQuery = defineTypedQuery<SanityHandbook | SanityHandbookGuide>(\n `*[_type == \"${handbookTypeName}\" || _type == \"${guideTypeName}\"]`,\n);\n","import { useEffect, useState } from \"react\";\nimport { useClient } from \"sanity\";\n\nimport { apiVersion } from \"@/config/defaults\";\nimport { handbookDocumentsQuery, handbookQuery } from \"@/groq/documents\";\nimport { fetchQuery } from \"@/lib/groq\";\nimport type { SanityHandbook } from \"@/types\";\n\n/**\n * Fetches the Handbook document with its guides expanded, refetching when any Handbook document changes.\n *\n * @returns The Handbook document, and whether it's still loading.\n */\nexport function useHandbookDocument() {\n const client = useClient({ apiVersion });\n const [handbook, setHandbook] = useState<SanityHandbook | undefined>(undefined);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n async function fetchHandbook() {\n setHandbook(await fetchQuery(client, handbookQuery));\n setLoading(false);\n }\n\n void fetchHandbook();\n\n const subscription = client.listen(handbookDocumentsQuery).subscribe(() => {\n void fetchHandbook();\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [client]);\n\n return { handbook, loading };\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { createContext, useContext, useState } from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport { logger } from \"@/config/defaults\";\nimport { useHandbookDocument } from \"@/hooks/use-handbook-document\";\nimport type { SanityHandbookBlockDefinition, SanityHandbookDocumentRole } from \"@/plugin\";\nimport type { SanityHandbook } from \"@/types\";\n\n/** Plugin configuration with every default applied. */\nexport interface HandbookProviderConfig {\n /** Heading at the top of the sidebar. */\n sidebarTitle: string;\n /** Document roles from the plugin configuration. */\n roles: SanityHandbookDocumentRole[];\n /** Custom blocks added by the site. */\n blocks: SanityHandbookBlockDefinition[];\n /** Message shown for fields without a description. */\n undocumentedFieldMessage: string;\n}\n\n/** Provider configuration plus the tab and sidebar state shared by the panes. */\ntype HandbookContextValues = HandbookProviderConfig & {\n /** ID of the selected tab, or undefined when none is selected. */\n activeTab: string | undefined;\n /** Whether the sidebar is expanded. */\n sidebarExpanded: boolean;\n /** Whether the Handbook document is still loading. */\n loading: boolean;\n /** Handbook document fetched from the dataset. */\n handbook: SanityHandbook | undefined;\n /** Selects a tab by ID. */\n setActiveTab: (id: string) => void;\n /** Expands or collapses the sidebar. */\n setSidebarExpanded: (expanded: boolean) => void;\n};\n\nexport type HandbookProviderProps = HandbookProviderConfig & {\n children: ReactNode;\n};\n\nconst HandbookContext = createContext<HandbookContextValues | undefined>(undefined);\n\n/**\n * Reads the Handbook context.\n *\n * @returns The plugin configuration and the shared pane state.\n * @throws When used outside the provider.\n */\nexport function useHandbookContext() {\n const handbookContext = useContext(HandbookContext);\n\n if (!isDefined(handbookContext)) {\n throw new Error(logger.format(\"Handbook context is only available inside the Handbook provider.\"));\n }\n\n return handbookContext;\n}\n\n/**\n * Provides the plugin configuration, the Handbook document, and the tab state shared by the sidebar and\n * content panes.\n *\n * @returns The provider.\n */\nexport function HandbookProvider({\n sidebarTitle,\n roles,\n blocks,\n undocumentedFieldMessage,\n children,\n}: HandbookProviderProps) {\n const [activeTab, setActiveTab] = useState<string | undefined>(undefined);\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const { handbook, loading } = useHandbookDocument();\n\n return (\n <HandbookContext\n value={{\n sidebarTitle,\n roles,\n blocks,\n undocumentedFieldMessage,\n activeTab,\n sidebarExpanded,\n loading,\n handbook,\n setActiveTab,\n setSidebarExpanded,\n }}\n >\n {children}\n </HandbookContext>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { Box, Card, Flex, Layer, LayerProvider, Text, useElementSize, useTheme_v2 } from \"@sanity/ui\";\nimport { useContext } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { PaneContext } from \"sanity/_singletons\";\n\nimport { collapsedPaneWidth } from \"@/config/layout\";\n\nexport type PaneHeaderProps = ComponentProps<\"div\"> & {\n title: string;\n backButton?: ReactNode;\n};\n\nexport function PaneHeader({ title, backButton, style, ...props }: PaneHeaderProps) {\n const { color } = useTheme_v2();\n const pane = useContext(PaneContext);\n const paneSize = useElementSize(pane?.rootElement ?? null);\n\n const collapsed = pane?.collapsed ?? false;\n const isLast = pane?.isLast ?? false;\n const paneHeight = paneSize?.border.height ?? 0;\n const collapsedWidth = paneHeight > 0 ? paneHeight : window.innerHeight;\n const { bg, fg } = color.selectable.default.enabled;\n\n function handleTitleClick() {\n if (collapsed) return;\n pane?.collapse();\n }\n\n function handleLayoutClick() {\n if (!collapsed) return;\n pane?.expand();\n }\n\n return (\n <LayerProvider zOffset={100}>\n <Layer\n data-collapsed={collapsed ? \"\" : undefined}\n style={{ lineHeight: 0, position: \"sticky\", top: 0, ...style }}\n {...props}\n >\n <Card tone=\"inherit\" data-collapsed={collapsed ? \"\" : undefined}>\n <Flex\n direction=\"column\"\n gap={3}\n onClick={handleLayoutClick}\n padding={3}\n sizing=\"border\"\n style={{\n width: collapsed ? collapsedWidth : undefined,\n transform: collapsed ? \"rotate(90deg)\" : undefined,\n transformOrigin: `calc(${collapsedPaneWidth}px / 2)`,\n }}\n >\n <Flex align=\"flex-start\" gap={3}>\n {isDefined(backButton) && <Box flex=\"none\">{backButton}</Box>}\n <Card\n flex={1}\n onClick={handleTitleClick}\n padding={2}\n paddingLeft={isDefined(backButton) ? 1 : 2}\n tabIndex={isLast && !collapsed ? -1 : 0}\n style={{ backgroundColor: bg, minWidth: 0 }}\n __unstable_focusRing\n >\n <Flex align=\"center\" gap={1}>\n <Text\n size={1}\n textOverflow=\"ellipsis\"\n weight=\"semibold\"\n style={{ color: fg, cursor: \"default\", minWidth: 0, outline: \"none\" }}\n >\n {title}\n </Text>\n </Flex>\n </Card>\n </Flex>\n </Flex>\n </Card>\n </Layer>\n </LayerProvider>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { ArrowLeftIcon } from \"@sanity/icons/ArrowLeft\";\nimport { Box, Button, Heading, Stack, Text } from \"@sanity/ui\";\nimport { useContext } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { PaneLayoutContext } from \"sanity/_singletons\";\nimport { PaneContent } from \"sanity/structure\";\n\nimport { PaneHeader } from \"@/components/pane-header\";\nimport { contentPaddingBlockEnd, contentPaddingBlockStart, contentPaddingInline, contentWidth } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\n\nexport type ContentPanelProps = Omit<ComponentProps<typeof PaneContent>, \"id\" | \"title\"> & {\n id: string;\n title: string;\n description?: string;\n children: ReactNode;\n};\n\nexport function ContentPanel({ id, title, description, children, ...props }: ContentPanelProps) {\n const { setSidebarExpanded } = useHandbookContext();\n const paneLayout = useContext(PaneLayoutContext);\n\n return (\n <>\n <PaneHeader\n title={title}\n backButton={\n paneLayout?.collapsed === true && (\n <Button\n aria-label=\"Back\"\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n onClick={() => {\n setSidebarExpanded(true);\n }}\n />\n )\n }\n />\n <PaneContent id={`panel-${id}`} aria-labelledby={id} overflow=\"auto\" {...props}>\n <Box\n style={{\n maxWidth: contentWidth,\n boxSizing: \"border-box\",\n marginInline: \"auto\",\n paddingInline: contentPaddingInline,\n paddingBlockStart: contentPaddingBlockStart,\n paddingBlockEnd: contentPaddingBlockEnd,\n }}\n >\n <Stack marginBottom={6} gap={5}>\n <Heading as=\"h2\" size={4}>\n {title}\n </Heading>\n {isDefined(description) && (\n <Text size={1} muted>\n {description}\n </Text>\n )}\n </Stack>\n {children}\n </Box>\n </PaneContent>\n </>\n );\n}\n","import { Box, Button, Stack, Text, useClickOutsideEvent } from \"@sanity/ui\";\nimport { Popover } from \"@sanity/ui/popover\";\nimport { useRef } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nexport type FieldHintProps = Omit<ComponentProps<typeof Popover>, \"content\" | \"open\" | \"children\"> & {\n label: string;\n icon: ReactNode;\n open: boolean;\n children: string;\n onOpen: () => void;\n onClose: () => void;\n};\n\nexport function FieldHint({ label, icon, open, children, onOpen, onClose, ...props }: FieldHintProps) {\n const buttonReference = useRef<HTMLButtonElement>(null);\n const popoverReference = useRef<HTMLDivElement>(null);\n\n useClickOutsideEvent(open ? onClose : undefined, () => [buttonReference.current, popoverReference.current]);\n\n return (\n <Popover\n open={open}\n placement=\"top\"\n portal\n radius={2}\n shadow={2}\n content={\n <div ref={popoverReference}>\n <Box padding={3} style={{ maxWidth: 280 }}>\n <Stack gap={3}>\n <Text size={1} weight=\"semibold\">\n {label}\n </Text>\n <Text size={1} muted>\n {children}\n </Text>\n </Stack>\n </Box>\n </div>\n }\n {...props}\n >\n <Button\n ref={buttonReference}\n aria-label={label}\n fontSize={2}\n icon={icon}\n mode=\"bleed\"\n padding={1}\n onClick={open ? onClose : onOpen}\n onPointerEnter={(event) => {\n if (event.pointerType === \"mouse\") onOpen();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"mouse\") onClose();\n }}\n />\n </Popover>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type InfoIconProps = ComponentProps<\"svg\">;\n\nexport function InfoIcon(props: InfoIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type LightbulbIconProps = ComponentProps<\"svg\">;\n\nexport function LightbulbIcon(props: LightbulbIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\" />\n <path d=\"M9 18h6\" />\n <path d=\"M10 22h4\" />\n </svg>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type TriangleAlertIconProps = ComponentProps<\"svg\">;\n\nexport function TriangleAlertIcon(props: TriangleAlertIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n","import type { ComponentProps, ComponentType } from \"react\";\n\nimport { InfoIcon } from \"@/icons/info\";\nimport { LightbulbIcon } from \"@/icons/lightbulb\";\nimport { TriangleAlertIcon } from \"@/icons/triangle-alert\";\nimport type { SanityHandbookMetadata } from \"@/plugin\";\n\n/** A kind of field hint: the metadata property it comes from and how it's shown. */\ninterface HintKind {\n /** Property in the field's handbook metadata that holds the hint. */\n name: keyof Pick<SanityHandbookMetadata, \"tip\" | \"info\" | \"caution\">;\n /** Heading above the hint, and the icon's accessible label. */\n label: string;\n /** Icon for the hint kind. */\n icon: ComponentType<ComponentProps<\"svg\">>;\n}\n\n/** Hint kinds, in display order. */\nexport const hintKinds: HintKind[] = [\n { name: \"tip\", label: \"Tip\", icon: LightbulbIcon },\n { name: \"info\", label: \"Information\", icon: InfoIcon },\n { name: \"caution\", label: \"Caution\", icon: TriangleAlertIcon },\n];\n","import { defaultIconProps } from \"@repo/lib/icons\";\nimport { isDefined } from \"@repo/lib/utils\";\nimport { Flex } from \"@sanity/ui\";\nimport type { FlexProps } from \"@sanity/ui\";\nimport { useState } from \"react\";\n\nimport { FieldHint } from \"@/components/documentation/hint\";\nimport { hintKinds } from \"@/config/hints\";\nimport type { SanityHandbookMetadata } from \"@/plugin\";\n\nexport type FieldHintsProps = FlexProps & Pick<SanityHandbookMetadata, \"tip\" | \"info\" | \"caution\">;\n\nexport function FieldHints({ tip, info, caution, ...props }: FieldHintsProps) {\n const [openHint, setOpenHint] = useState<string | undefined>(undefined);\n\n const hints = { tip, info, caution };\n\n function closeHint() {\n setOpenHint(undefined);\n }\n\n return (\n <Flex align=\"center\" gap={2} {...props}>\n {hintKinds.flatMap(({ name, label, icon: Icon }) => {\n const hint = hints[name];\n if (!isDefined(hint)) return [];\n\n return (\n <FieldHint\n key={name}\n label={label}\n icon={<Icon {...defaultIconProps} />}\n open={openHint === name}\n onOpen={() => {\n setOpenHint(name);\n }}\n onClose={closeHint}\n >\n {hint}\n </FieldHint>\n );\n })}\n </Flex>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { convertCase } from \"@repo/lib/utils\";\nimport type { ComponentProps, ComponentType, ReactNode } from \"react\";\n\n/**\n * Works out a schema type's label: its Handbook title, then its schema title, then its name in title case.\n *\n * @param type - The schema type or field.\n * @returns The label.\n */\nexport function resolveTitle(type: { name: string; title?: string; handbook?: { title?: string } }) {\n const { name, title, handbook } = type;\n\n return handbook?.title ?? title ?? convertCase(name, \"title\");\n}\n\n/**\n * Works out a schema type's description, preferring its Handbook description and ignoring non-string\n * schema descriptions.\n *\n * @param type - The schema type or field.\n * @returns The description, or undefined when there isn't one.\n */\nexport function resolveDescription(type: { description?: unknown; handbook?: { description?: string } }) {\n const { description, handbook } = type;\n\n return handbook?.description ?? (typeof description === \"string\" ? description : undefined);\n}\n\n/**\n * Gets a schema type's icon as a component, redrawn at the plugin's icon size to match the built-in icons.\n * String icons are ignored.\n *\n * @param type - The schema type.\n * @returns The icon component, or undefined when there isn't one.\n */\nexport function resolveIcon(type: { icon?: ReactNode | ComponentType<ComponentProps<\"svg\">> }) {\n return typeof type.icon === \"function\" ? createSanityIcon(type.icon) : undefined;\n}\n","import { isDefined, isRecord, readPath } from \"@repo/lib/utils\";\nimport type { FieldDefinition, Schema } from \"sanity\";\n\n/** A schema field as Sanity compiles it, with its type resolved to an object. */\ninterface CompiledField {\n /** Field name. */\n name: string;\n /** Resolved type, with its name and base type details. */\n type: { name: string; title?: string; description?: string; fields?: unknown[]; of?: unknown[] };\n /** Title set on an inline object definition. */\n title?: string;\n /** Description set on an inline object definition. */\n description?: string;\n /** Fields defined on an inline object definition. */\n fields?: unknown[];\n /** Members defined on an inline array definition. */\n of?: unknown[];\n /** Handbook documentation for the field. */\n handbook?: FieldDefinition[\"handbook\"];\n}\n\n/** A schema field in the shape the Handbook renders, with its type reduced to a name. */\nexport interface NormalizedField {\n /** Field name. */\n name: string;\n /** Type name. */\n type: string;\n /** Title, falling back to the base type's. */\n title?: string;\n /** Description, falling back to the base type's. */\n description?: string;\n /** Handbook documentation for the field. */\n handbook?: FieldDefinition[\"handbook\"];\n /** Subfields, on object types. */\n fields?: NormalizedField[];\n /** Members, on array types. */\n of?: NormalizedField[];\n}\n\n/** Types whose subfields aren't shown. */\nconst opaqueTypes = new Set([\n \"block\",\n \"boolean\",\n \"crossDatasetReference\",\n \"date\",\n \"datetime\",\n \"file\",\n \"geopoint\",\n \"image\",\n \"number\",\n \"reference\",\n \"slug\",\n \"string\",\n \"text\",\n \"url\",\n]);\n\n/** Fields Sanity adds to its built-in types when compiling the schema. */\nconst inheritedFieldNames: Partial<Record<string, Set<string>>> = {\n block: new Set([\"children\", \"level\", \"listItem\", \"markDefs\", \"style\"]),\n file: new Set([\"asset\", \"media\"]),\n geopoint: new Set([\"alt\", \"lat\", \"lng\"]),\n image: new Set([\"asset\", \"crop\", \"hotspot\", \"media\"]),\n slug: new Set([\"current\", \"source\"]),\n};\n\n/**\n * Checks whether a value is a compiled schema field with a type object.\n *\n * @param value - The value to check.\n * @returns True if the value is a compiled field.\n */\nfunction isCompiledField(value: unknown): value is CompiledField {\n if (!isRecord(value)) return false;\n if (!(\"name\" in value) || !(\"type\" in value)) return false;\n\n return isRecord(value[\"type\"]);\n}\n\n/**\n * Checks whether a value has a `fields` array.\n *\n * @param value - The value to check.\n * @returns True if the value has a `fields` array.\n */\nfunction hasFieldsArray(value: unknown): value is { fields: unknown[] } {\n return isRecord(value) && Array.isArray(value[\"fields\"]);\n}\n\n/**\n * Checks whether a value has an `of` array.\n *\n * @param value - The value to check.\n * @returns True if the value has an `of` array.\n */\nfunction hasOfArray(value: unknown): value is { of: unknown[] } {\n return isRecord(value) && Array.isArray(value[\"of\"]);\n}\n\n/**\n * Reads the type name a value declares.\n *\n * @param value - The value.\n * @returns The type name, or undefined when there isn't one.\n */\nfunction getTypeName(value: unknown) {\n const typeName = readPath(value, [\"type\"]);\n\n return typeof typeName === \"string\" ? typeName : undefined;\n}\n\n/**\n * Reads the parent type name from a compiled schema type.\n *\n * @param resolvedType - The compiled schema type.\n * @returns The parent type name, or undefined when there isn't one.\n */\nfunction getParentTypeName(resolvedType: unknown) {\n const parentName = readPath(resolvedType, [\"type\", \"name\"]);\n\n return isDefined(parentName) ? String(parentName) : undefined;\n}\n\n/**\n * Converts a compiled schema field into the shape the Handbook renders. Types already seen are tracked,\n * so a type that refers to itself doesn't recurse forever.\n *\n * @param field - A compiled field or a plain field definition.\n * @param visited - Type names already seen.\n * @returns The normalised field.\n */\nfunction normalizeField(field: unknown, visited = new Set<string>()) {\n if (isCompiledField(field)) {\n const typeName = field.type.name;\n\n const result: NormalizedField = {\n name: field.name,\n type: typeName,\n title: field.title ?? field.type.title,\n description: field.description ?? field.type.description,\n handbook: field.handbook,\n };\n\n if (!visited.has(typeName)) {\n const shouldTrack = !opaqueTypes.has(typeName) && typeName !== \"object\" && typeName !== \"array\";\n const next = shouldTrack ? new Set([...visited, typeName]) : visited;\n const fieldSource = hasFieldsArray(field) ? field : field.type;\n const ofSource = hasOfArray(field) ? field : field.type;\n\n if (hasFieldsArray(fieldSource)) {\n result.fields = fieldSource.fields.map((subfield) => normalizeField(subfield, next));\n }\n if (hasOfArray(ofSource)) result.of = ofSource.of.map((member) => normalizeField(member, next));\n }\n\n return result;\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion -- An already normalised value carries no marker to narrow on.\n return field as NormalizedField;\n}\n\n/**\n * Lists the fields a custom type adds to an opaque base type, leaving out the base type's own.\n *\n * @param resolvedType - The compiled or normalised schema type.\n * @param parentName - The opaque base type's name.\n * @returns The custom fields, or undefined when there are none.\n */\nfunction resolveCustomFields(resolvedType: unknown, parentName: string) {\n if (!hasFieldsArray(resolvedType)) return undefined;\n\n const inherited = inheritedFieldNames[parentName];\n\n const customFields = resolvedType.fields\n .map((field: unknown) => normalizeField(field))\n .filter((field) => !isDefined(inherited) || !inherited.has(field.name));\n\n return isDefined(customFields) ? customFields : undefined;\n}\n\n/**\n * Normalises a list of raw fields.\n *\n * @param items - The raw fields.\n * @returns The normalised fields, or undefined when there are none.\n */\nfunction resolveNormalizedFields(items: unknown[]) {\n const normalized = items.map((item) => normalizeField(item));\n\n return isDefined(normalized) ? normalized : undefined;\n}\n\n/**\n * Normalises array members, leaving out opaque types.\n *\n * @param members - The raw array members.\n * @returns The normalised members, or undefined when there are none.\n */\nfunction resolveNormalizedMembers(members: unknown[]) {\n const normalized = members.map((member) => normalizeField(member)).filter((member) => !opaqueTypes.has(member.type));\n\n return isDefined(normalized) ? normalized : undefined;\n}\n\n/**\n * Works out a value's parent type name, looking it up in the schema when the value only names its type.\n *\n * @param value - The value.\n * @param schema - The Sanity schema.\n * @returns The parent type name, or undefined when there isn't one.\n */\nfunction resolveParentName(value: unknown, schema: Schema) {\n const direct = getParentTypeName(value);\n if (isDefined(direct)) return direct;\n\n const typeName = getTypeName(value);\n if (!isDefined(typeName)) return undefined;\n\n const resolvedType = schema.get(typeName);\n return isDefined(resolvedType) ? getParentTypeName(resolvedType) : undefined;\n}\n\n/**\n * Works out the fields a value shows, whether it holds them directly, has array members that do, or\n * names a type that does.\n *\n * @param value - The value.\n * @param schema - The Sanity schema.\n * @returns The fields, or undefined when there are none.\n */\nfunction resolveFields(value: unknown, schema: Schema) {\n if (hasFieldsArray(value)) {\n const parentName = resolveParentName(value, schema);\n if (isDefined(parentName) && opaqueTypes.has(parentName)) return resolveCustomFields(value, parentName);\n\n return resolveNormalizedFields(value.fields);\n }\n\n if (hasOfArray(value)) {\n const members = value.of;\n\n if (members.length === 1) {\n const [member] = members;\n const normalized = normalizeField(member);\n\n if (opaqueTypes.has(normalized.type)) return undefined;\n\n if (hasFieldsArray(normalized)) {\n const parentName = resolveParentName(normalized, schema);\n if (isDefined(parentName) && opaqueTypes.has(parentName)) return resolveCustomFields(normalized, parentName);\n\n return resolveNormalizedFields(normalized.fields);\n }\n\n const memberType = schema.get(normalized.type);\n if (isDefined(memberType)) return resolveFields(memberType, schema);\n }\n\n return resolveNormalizedMembers(members);\n }\n\n return undefined;\n}\n\n/**\n * Works out a field's visible subfields by looking through the schema.\n *\n * @param field - The field.\n * @param schema - The Sanity schema.\n * @returns The subfields, or undefined when there are none.\n */\nexport function getSubfields(field: FieldDefinition | NormalizedField, schema: Schema) {\n if (opaqueTypes.has(field.type)) return undefined;\n\n const directFields = resolveFields(field, schema);\n if (isDefined(directFields)) return directFields;\n\n const resolvedType = schema.get(field.type);\n if (!isDefined(resolvedType)) return undefined;\n\n const parentName = getParentTypeName(resolvedType);\n if (isDefined(parentName) && opaqueTypes.has(parentName)) {\n return resolveCustomFields(resolvedType, parentName);\n }\n\n return resolveFields(resolvedType, schema);\n}\n","import { convertCase, isDefined } from \"@repo/lib/utils\";\nimport { ChevronDownIcon } from \"@sanity/icons/ChevronDown\";\nimport { ChevronRightIcon } from \"@sanity/icons/ChevronRight\";\nimport { Box, Card, Flex, Stack, Text } from \"@sanity/ui\";\nimport type { StackProps } from \"@sanity/ui\";\nimport { useState } from \"react\";\nimport type { FieldDefinition } from \"sanity\";\nimport { useSchema } from \"sanity\";\n\nimport { FieldHints } from \"@/components/documentation/hints\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { resolveDescription, resolveTitle } from \"@/lib/display\";\nimport type { NormalizedField } from \"@/lib/schema\";\nimport { getSubfields } from \"@/lib/schema\";\n\nexport type DocumentedFieldProps = StackProps & {\n field: FieldDefinition | NormalizedField;\n ancestors?: Set<string>;\n};\n\n/** Shared empty set, so the default prop keeps the same reference between renders. */\nconst noAncestors = new Set<string>();\n\nexport function DocumentedField({ field, ancestors = noAncestors, ...props }: DocumentedFieldProps) {\n const schema = useSchema();\n const { undocumentedFieldMessage } = useHandbookContext();\n const [expanded, setExpanded] = useState(false);\n\n const effectiveTitle = resolveTitle(field);\n const effectiveDescription = resolveDescription(field) ?? undocumentedFieldMessage;\n\n const { example, tip, info, caution } = field.handbook ?? {};\n const hasHints = isDefined([tip, info, caution]);\n\n const isCycle = ancestors.has(field.type);\n const subfields = isCycle ? undefined : getSubfields(field, schema);\n const hasSubfields = isDefined(subfields);\n\n return (\n <Stack gap={2} {...props}>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1} gap={2}>\n <Box flex={1}>\n <Flex align=\"center\" gap={2}>\n <Text size={1} weight=\"medium\">\n {effectiveTitle}\n </Text>\n <Text size={0} muted style={{ marginTop: 2 }}>\n {field.type}\n </Text>\n </Flex>\n </Box>\n {hasHints && <FieldHints tip={tip} info={info} caution={caution} />}\n </Flex>\n {isDefined(effectiveDescription) && (\n <Text size={1} muted>\n {effectiveDescription}\n </Text>\n )}\n {isDefined(example) && (\n <Box marginTop={1}>\n <Text size={1} muted style={{ fontStyle: \"italic\" }}>\n e.g. {example}\n </Text>\n </Box>\n )}\n </Stack>\n {isCycle && (\n <Box marginTop={2}>\n <Text size={1} muted style={{ fontStyle: \"italic\" }}>\n See {convertCase(field.type, \"title\")} above.\n </Text>\n </Box>\n )}\n {hasSubfields && (\n <>\n <Card\n as=\"button\"\n padding={3}\n radius={2}\n sizing=\"border\"\n tone=\"transparent\"\n onClick={() => {\n setExpanded(!expanded);\n }}\n style={{ marginTop: 16, textAlign: \"left\", border: \"none\", cursor: \"pointer\" }}\n >\n <Flex align=\"center\" gap={2}>\n <Text size={0}>{expanded ? <ChevronDownIcon /> : <ChevronRightIcon />}</Text>\n <Text size={1} muted weight=\"medium\">\n {subfields.length} subfield{subfields.length === 1 ? \"\" : \"s\"}\n </Text>\n </Flex>\n </Card>\n {expanded && (\n <Box\n style={{\n marginTop: 16,\n marginBottom: 8,\n paddingLeft: 16,\n borderLeft: \"1px solid var(--card-border-color)\",\n }}\n >\n <Stack gap={5}>\n {subfields.map((subfield) => (\n <DocumentedField\n key={subfield.name}\n field={subfield}\n ancestors={new Set([...ancestors, field.type])}\n />\n ))}\n </Stack>\n </Box>\n )}\n </>\n )}\n </Stack>\n );\n}\n","import { DocumentedField } from \"@/components/documentation/field\";\nimport { contentSpacing } from \"@/config/layout\";\nimport { resolveDescription, resolveIcon, resolveTitle } from \"@/lib/display\";\nimport type { SanityHandbookDocumentRole } from \"@/plugin\";\n\n/**\n * Builds a sidebar section for each document role.\n *\n * @param roles - The configured document roles.\n * @returns One section per role, with an entry per document type.\n */\nexport function documentTypesSections(roles: SanityHandbookDocumentRole[]) {\n return roles.map(({ title, documents }) => ({\n title,\n entries: documents.map((document) => ({\n id: document.name,\n title: resolveTitle(document),\n description: resolveDescription(document),\n icon: resolveIcon(document),\n render: () => (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: contentSpacing.section }}>\n {document.fields.map((field) => (\n <DocumentedField key={field.name} field={field} />\n ))}\n </div>\n ),\n })),\n }));\n}\n","import type { ComponentProps } from \"react\";\n\nexport type LayoutGridIconProps = ComponentProps<\"svg\">;\n\nexport function LayoutGridIcon(props: LayoutGridIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </svg>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { ChevronRightIcon } from \"@sanity/icons/ChevronRight\";\nimport { Box, Card, Flex, Stack, Text } from \"@sanity/ui\";\n\nimport { contentSpacing } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { resolveDescription, resolveIcon, resolveTitle } from \"@/lib/display\";\n\nexport function DocumentTypesOverview() {\n const { roles, setActiveTab, setSidebarExpanded } = useHandbookContext();\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: contentSpacing.section }}>\n {roles.map((role) => {\n const { title, description, documents } = role;\n\n return (\n <Stack key={title} gap={2}>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n {title}\n </Text>\n </Flex>\n {isDefined(description) && (\n <Text size={1} muted>\n {description}\n </Text>\n )}\n </Stack>\n <Box marginTop={1}>\n <Stack gap={2}>\n {documents.map((document) => {\n const Icon = resolveIcon(document);\n const documentDescription = resolveDescription(document);\n\n return (\n <Card\n key={document.name}\n as=\"button\"\n padding={3}\n radius={2}\n sizing=\"border\"\n tone=\"inherit\"\n onClick={() => {\n setActiveTab(document.name);\n setSidebarExpanded(false);\n }}\n style={{\n width: \"calc(100% + 24px)\",\n marginLeft: \"-12px\",\n textAlign: \"left\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n <Flex align=\"center\" gap={3}>\n <Box flex={1}>\n <Stack gap={3}>\n <Flex align=\"center\" gap={2} style={{ marginLeft: \"-4px\" }}>\n {isDefined(Icon) && (\n <Flex\n align=\"center\"\n justify=\"center\"\n style={{ width: 25, height: 25, color: \"var(--card-icon-color)\" }}\n >\n <Icon />\n </Flex>\n )}\n <Text size={1} weight=\"medium\">\n {resolveTitle(document)}\n </Text>\n </Flex>\n {isDefined(documentDescription) && (\n <Box paddingBottom={1}>\n <Text size={1} muted>\n {documentDescription}\n </Text>\n </Box>\n )}\n </Stack>\n </Box>\n <Box flex=\"none\" style={{ opacity: 0.5 }}>\n <Text muted size={1}>\n <ChevronRightIcon />\n </Text>\n </Box>\n </Flex>\n </Card>\n );\n })}\n </Stack>\n </Box>\n </Stack>\n );\n })}\n </div>\n );\n}\n","import { defaultIconProps } from \"@repo/lib/icons\";\nimport { Flex, Stack, Text } from \"@sanity/ui\";\n\nimport { hintKinds } from \"@/config/hints\";\nimport { contentSpacing } from \"@/config/layout\";\n\n/** What each hint kind means, shown next to its icon as a key. */\nconst hintDescriptions = {\n tip: \"Tips and suggested practices for people editing content.\",\n info: \"More detail about how and where the field is used.\",\n caution: \"Warnings about restrictions or problems the field can cause.\",\n} satisfies Record<(typeof hintKinds)[number][\"name\"], string>;\n\nexport function HowToUse() {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: contentSpacing.section }}>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Navigating the Handbook\n </Text>\n </Flex>\n <Text size={1} muted>\n The sidebar lists everything in the Handbook: these introductory pages first, then the document types you can\n create, grouped by their role on the site, and then any guides your team has written. Select an entry to open\n it here.\n </Text>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Understanding Fields\n </Text>\n </Flex>\n <Text size={1} muted>\n Selecting a document type lists its fields, with each field’s name, the kind of value it holds, and what it’s\n for. This documentation is generated from the content model, so it always matches what you see in the editor.\n </Text>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Hints and Warnings\n </Text>\n </Flex>\n <Text size={1} muted>\n Icons next to a field’s name hold extra guidance that would make its description too long. Hover over or click\n an icon to read it, and use the key below to see what each icon means.\n </Text>\n <Stack gap={3} marginTop={2}>\n {hintKinds.map(({ name, icon: Icon }) => (\n <Flex key={name} align=\"center\" gap={3}>\n <Flex align=\"center\" flex=\"none\" style={{ fontSize: \"16px\", color: \"var(--card-icon-color)\" }}>\n <Icon {...defaultIconProps} />\n </Flex>\n <Text size={1} muted>\n {hintDescriptions[name]}\n </Text>\n </Flex>\n ))}\n </Stack>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Nested Fields\n </Text>\n </Flex>\n <Text size={1} muted>\n Some fields contain subfields, such as a content block with a heading and body text. A button below the\n description shows how many there are and expands to list them, each documented like any other field.\n </Text>\n </Stack>\n <Stack gap={3}>\n <Flex align=\"center\" paddingY={1}>\n <Text size={1} weight=\"medium\">\n Guides\n </Text>\n </Flex>\n <Text size={1} muted>\n Below the document types, you may find guides written by your team rather than generated from the content\n model. They cover things a field description can’t, such as house style, editorial process, and how everything\n fits together.\n </Text>\n </Stack>\n </div>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\n\nimport { BookTextIcon } from \"@/icons/book-text\";\nimport { LayoutGridIcon } from \"@/icons/layout-grid\";\nimport { DocumentTypesOverview } from \"@/pages/document-types-overview\";\nimport { HowToUse } from \"@/pages/how-to-use\";\n\n/**\n * Builds the section for the plugin's introductory pages.\n *\n * @returns One section listing the built-in pages.\n */\nexport function gettingStartedSections() {\n return [\n {\n title: \"Getting Started\",\n entries: [\n {\n id: \"how-to-use-this-handbook\",\n title: \"How to use the Handbook\",\n description:\n \"How to find your way around the Handbook, read the documentation for each field, and understand its examples, hints, and subfields.\",\n icon: createSanityIcon(BookTextIcon),\n render: () => <HowToUse />,\n },\n {\n id: \"document-types\",\n title: \"Document Types\",\n description:\n \"A list of every document type, grouped by role. Select a document type to see its fields, descriptions, and examples.\",\n icon: createSanityIcon(LayoutGridIcon),\n render: () => <DocumentTypesOverview />,\n },\n ],\n },\n ];\n}\n","import { defaultIconProps } from \"@repo/lib/icons\";\nimport { Box, Card, Flex, Text } from \"@sanity/ui\";\nimport type { CardProps, CardTone } from \"@sanity/ui\";\nimport type { ComponentProps, ComponentType, ReactNode } from \"react\";\n\nimport { InfoIcon } from \"@/icons/info\";\nimport { LightbulbIcon } from \"@/icons/lightbulb\";\nimport { TriangleAlertIcon } from \"@/icons/triangle-alert\";\nimport type { SanityHandbookCalloutVariant } from \"@/types\";\n\n/** Icon and card tone for a callout variant. */\ninterface CalloutVariantStyle {\n /** Icon for the variant. */\n icon: ComponentType<ComponentProps<\"svg\">>;\n /** Card tone for the variant. */\n tone: CardTone;\n}\n\nexport type CalloutContentProps = Omit<CardProps, \"tone\"> & {\n variant: SanityHandbookCalloutVariant;\n children: ReactNode;\n};\n\n/** Icon and tone for each callout variant. */\nconst presentation: Record<SanityHandbookCalloutVariant, CalloutVariantStyle> = {\n tip: { icon: LightbulbIcon, tone: \"positive\" },\n info: { icon: InfoIcon, tone: \"primary\" },\n warning: { icon: TriangleAlertIcon, tone: \"caution\" },\n};\n\nexport function CalloutContent({ variant, children, ...props }: CalloutContentProps) {\n const { icon: Icon, tone } = presentation[variant];\n\n return (\n <Card padding={4} radius={2} tone={tone} {...props}>\n <Flex align=\"flex-start\" gap={3}>\n <Box flex=\"none\" style={{ marginTop: \"-2px\", fontSize: \"16px\", color: \"var(--card-icon-color)\" }}>\n <Icon {...defaultIconProps} />\n </Box>\n <Text size={1} style={{ color: \"var(--card-icon-color)\" }}>\n {children}\n </Text>\n </Flex>\n </Card>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type PortableCodeProps = ComponentProps<\"code\">;\n\nexport function PortableCode({ style, ...props }: PortableCodeProps) {\n return (\n <code\n style={{\n paddingBlock: 2,\n paddingInline: 4,\n fontSize: \"0.875em\",\n backgroundColor: \"var(--card-code-bg-color)\",\n borderRadius: 2,\n ...style,\n }}\n {...props}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type PortableLinkProps = ComponentProps<\"a\">;\n\nexport function PortableLink({ children, style, ...props }: PortableLinkProps) {\n return (\n <a target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: \"var(--card-link-fg-color)\", ...style }} {...props}>\n {children}\n </a>\n );\n}\n","import { PortableText } from \"@portabletext/react\";\nimport type { PortableTextComponents, PortableTextMarkComponentProps } from \"@portabletext/react\";\nimport type { ComponentProps } from \"react\";\n\nimport { CalloutContent } from \"@/components/blocks/callout/content\";\nimport { PortableCode } from \"@/components/content/portable/code\";\nimport { PortableLink } from \"@/components/content/portable/link\";\nimport { contentSpacing } from \"@/config/layout\";\nimport type { SanityHandbookCallout, SanityHandbookLink } from \"@/types\";\n\nexport type CalloutBlockProps = Omit<ComponentProps<typeof CalloutContent>, \"variant\" | \"children\"> & {\n value: SanityHandbookCallout;\n};\n\n/** Overrides for callout text, which uses the card's own text style and doesn't wrap paragraphs. */\nconst components: PortableTextComponents = {\n block: { normal: ({ children }) => <>{children}</> },\n marks: {\n code: ({ children }) => <PortableCode>{children}</PortableCode>,\n link: ({ children, value }: PortableTextMarkComponentProps<SanityHandbookLink>) => (\n <PortableLink href={value?.href}>{children}</PortableLink>\n ),\n },\n};\n\nexport function CalloutBlock({ value, style, ...props }: CalloutBlockProps) {\n return (\n <CalloutContent variant={value.variant} style={{ marginBlock: contentSpacing.callout, ...style }} {...props}>\n <PortableText value={value.body} components={components} />\n </CalloutContent>\n );\n}\n","import { Card } from \"@sanity/ui\";\nimport type { CardProps } from \"@sanity/ui\";\nimport { Code } from \"@sanity/ui/code\";\n\nexport type CodeContentProps = CardProps & {\n code: string;\n language?: string;\n};\n\nexport function CodeContent({ code, language, style, ...props }: CodeContentProps) {\n return (\n <Card padding={4} radius={2} tone=\"transparent\" style={{ overflowX: \"auto\", ...style }} {...props}>\n <Code size={1} language={language}>\n {code}\n </Code>\n </Card>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { ComponentProps } from \"react\";\n\nimport { CodeContent } from \"@/components/blocks/code/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport type { SanityHandbookCode } from \"@/types\";\n\nexport type CodeBlockProps = Omit<ComponentProps<typeof CodeContent>, \"code\" | \"language\"> & {\n value: SanityHandbookCode;\n};\n\nexport function CodeBlock({ value, style, ...props }: CodeBlockProps) {\n if (!isDefined(value.code)) return null;\n\n return (\n <CodeContent\n code={value.code}\n language={value.language}\n style={{ marginBlock: contentSpacing.media, ...style }}\n {...props}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type HorizontalRuleContentProps = ComponentProps<\"hr\">;\n\nexport function HorizontalRuleContent({ style, ...props }: HorizontalRuleContentProps) {\n return <hr style={{ border: \"none\", borderTop: \"1px solid var(--card-border-color)\", ...style }} {...props} />;\n}\n","import type { ComponentProps } from \"react\";\n\nimport { HorizontalRuleContent } from \"@/components/blocks/horizontal-rule/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport type { SanityHandbookHorizontalRule } from \"@/types\";\n\nexport type HorizontalRuleBlockProps = ComponentProps<typeof HorizontalRuleContent> & {\n value: SanityHandbookHorizontalRule;\n};\n\nexport function HorizontalRuleBlock({ value: _value, style, ...props }: HorizontalRuleBlockProps) {\n return <HorizontalRuleContent style={{ marginBlock: contentSpacing.rule, ...style }} {...props} />;\n}\n","import { Box, Text } from \"@sanity/ui\";\nimport type { BoxProps } from \"@sanity/ui\";\n\nexport type CaptionProps = BoxProps & {\n children: string;\n};\n\nexport function Caption({ children, ...props }: CaptionProps) {\n return (\n <Box marginTop={3} {...props}>\n <Text size={1} muted style={{ fontStyle: \"italic\" }}>\n {children}\n </Text>\n </Box>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { ComponentProps } from \"react\";\n\nimport { Caption } from \"@/components/caption\";\n\nexport type ImageContentProps = ComponentProps<\"div\"> & {\n url: string;\n alt?: string;\n caption?: string;\n};\n\nexport function ImageContent({ url, alt, caption, ...props }: ImageContentProps) {\n return (\n <div {...props}>\n <img src={url} alt={alt ?? \"\"} style={{ display: \"block\", maxWidth: \"100%\", borderRadius: 4 }} />\n {isDefined(caption) && <Caption>{caption}</Caption>}\n </div>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { ComponentProps } from \"react\";\n\nimport { ImageContent } from \"@/components/blocks/image/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport type { SanityHandbookImage } from \"@/types\";\n\nexport type ImageBlockProps = Omit<ComponentProps<typeof ImageContent>, \"url\" | \"alt\" | \"caption\"> & {\n value: SanityHandbookImage;\n};\n\nexport function ImageBlock({ value, style, ...props }: ImageBlockProps) {\n if (!isDefined(value.asset?.url)) return null;\n\n return (\n <ImageContent\n url={value.asset.url}\n alt={value.alt}\n caption={value.caption}\n style={{ marginBlock: contentSpacing.media, ...style }}\n {...props}\n />\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { ComponentProps } from \"react\";\n\nimport { Caption } from \"@/components/caption\";\n\nexport type VideoContentProps = ComponentProps<\"div\"> & {\n url: string;\n caption?: string;\n};\n\nexport function VideoContent({ url, caption, ...props }: VideoContentProps) {\n return (\n <div {...props}>\n <video\n src={url}\n controls\n style={{ display: \"block\", maxWidth: \"100%\", borderRadius: 4, WebkitTransform: \"translateZ(0)\" }}\n >\n <track kind=\"captions\" label={caption ?? \"Video\"} />\n </video>\n {isDefined(caption) && <Caption>{caption}</Caption>}\n </div>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { ComponentProps } from \"react\";\n\nimport { VideoContent } from \"@/components/blocks/video/content\";\nimport { contentSpacing } from \"@/config/layout\";\nimport type { SanityHandbookVideo } from \"@/types\";\n\nexport type VideoBlockProps = Omit<ComponentProps<typeof VideoContent>, \"url\" | \"caption\"> & {\n value: SanityHandbookVideo;\n};\n\nexport function VideoBlock({ value, style, ...props }: VideoBlockProps) {\n if (!isDefined(value.asset?.url)) return null;\n\n return (\n <VideoContent\n url={value.asset.url}\n caption={value.caption}\n style={{ marginBlock: contentSpacing.media, ...style }}\n {...props}\n />\n );\n}\n","import { Box, Text } from \"@sanity/ui\";\nimport type { BoxProps } from \"@sanity/ui\";\n\nexport type PortableBlockquoteProps = BoxProps & {\n muted?: boolean;\n};\n\nexport function PortableBlockquote({ muted, children, style, ...props }: PortableBlockquoteProps) {\n return (\n <Box paddingY={1} paddingLeft={3} style={{ borderLeft: \"2px solid var(--card-border-color)\", ...style }} {...props}>\n <Text size={1} muted={muted} style={{ fontStyle: \"italic\" }}>\n {children}\n </Text>\n </Box>\n );\n}\n","import { Text } from \"@sanity/ui\";\nimport type { TextProps } from \"@sanity/ui\";\n\nexport type PortableHeadingProps = Omit<TextProps, \"as\">;\n\nexport function PortableHeading(props: PortableHeadingProps) {\n return <Text as=\"h2\" size={1} weight=\"medium\" {...props} />;\n}\n","import type { CSSProperties, ComponentProps } from \"react\";\n\n// `ref` is omitted because the rendered element varies, so no single ref type fits.\nexport type PortableListProps = Omit<ComponentProps<\"ul\">, \"ref\"> & {\n ordered?: boolean;\n};\n\nexport function PortableList({ ordered = false, style, ...props }: PortableListProps) {\n const listStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n margin: 0,\n paddingLeft: \"1.25em\",\n ...style,\n };\n\n if (ordered) return <ol style={listStyle} {...props} />;\n\n return <ul style={listStyle} {...props} />;\n}\n","import { Text } from \"@sanity/ui\";\nimport type { TextProps } from \"@sanity/ui\";\n\nexport type PortableParagraphProps = TextProps;\n\nexport function PortableParagraph(props: PortableParagraphProps) {\n return <Text size={1} {...props} />;\n}\n","import { PortableText as PortableTextReact } from \"@portabletext/react\";\nimport type {\n PortableTextComponentProps,\n PortableTextComponents,\n PortableTextMarkComponentProps,\n PortableTextTypeComponent,\n PortableTextTypeComponentProps,\n} from \"@portabletext/react\";\nimport type { ComponentProps, ComponentType } from \"react\";\nimport type { PortableTextBlock, PortableTextListBlock, PortableTextObject } from \"sanity\";\n\nimport { CalloutBlock } from \"@/components/blocks/callout/block\";\nimport { CodeBlock } from \"@/components/blocks/code/block\";\nimport { HorizontalRuleBlock } from \"@/components/blocks/horizontal-rule/block\";\nimport { ImageBlock } from \"@/components/blocks/image/block\";\nimport { VideoBlock } from \"@/components/blocks/video/block\";\nimport { PortableBlockquote } from \"@/components/content/portable/blockquote\";\nimport { PortableCode } from \"@/components/content/portable/code\";\nimport { PortableHeading } from \"@/components/content/portable/heading\";\nimport { PortableLink } from \"@/components/content/portable/link\";\nimport { PortableList } from \"@/components/content/portable/list\";\nimport { PortableParagraph } from \"@/components/content/portable/paragraph\";\nimport { contentSpacing } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport type { SanityHandbookLink, SanityKeyedArray } from \"@/types\";\nimport { calloutTypeName, codeTypeName, horizontalRuleTypeName, imageTypeName, videoTypeName } from \"@/types\";\n\n/**\n * Works out the vertical space around a list, which is smaller for nested lists.\n *\n * @param level - Nesting depth, starting at 1.\n * @returns The space in pixels.\n */\nfunction listSpacing(level: number) {\n return level > 1 ? contentSpacing.nestedList : contentSpacing.list;\n}\n\n/**\n * Components for each block style, mark, and embedded type in a guide. Marks and list items not listed\n * here are left to the library's defaults on purpose.\n */\nconst components: PortableTextComponents = {\n block: {\n h2: ({ children }) => (\n <PortableHeading style={{ marginBlockStart: contentSpacing.heading, marginBlockEnd: 4 }}>\n {children}\n </PortableHeading>\n ),\n normal: ({ children }) => (\n <PortableParagraph muted style={{ marginBlock: contentSpacing.paragraph }}>\n {children}\n </PortableParagraph>\n ),\n blockquote: ({ children }) => (\n <PortableBlockquote muted style={{ marginBlock: contentSpacing.blockquote }}>\n {children}\n </PortableBlockquote>\n ),\n },\n list: {\n bullet: ({ children, value }: PortableTextComponentProps<PortableTextListBlock>) => (\n <PortableParagraph muted style={{ marginBlock: listSpacing(value.level) }}>\n <PortableList>{children}</PortableList>\n </PortableParagraph>\n ),\n number: ({ children, value }: PortableTextComponentProps<PortableTextListBlock>) => (\n <PortableParagraph muted style={{ marginBlock: listSpacing(value.level) }}>\n <PortableList ordered>{children}</PortableList>\n </PortableParagraph>\n ),\n },\n marks: {\n code: ({ children }) => <PortableCode>{children}</PortableCode>,\n link: ({ children, value }: PortableTextMarkComponentProps<SanityHandbookLink>) => (\n <PortableLink href={value?.href}>{children}</PortableLink>\n ),\n },\n};\n\n/**\n * Wraps a block component for Portable Text, passing only the block's value. Otherwise the library's\n * other props would reach the DOM.\n *\n * @param Component - The block component.\n * @returns A component Portable Text can render the type with.\n */\nfunction blockRenderer<Value extends PortableTextObject>(Component: ComponentType<{ value: Value }>) {\n return function Block({ value }: PortableTextTypeComponentProps<Value>) {\n return <Component value={value} />;\n };\n}\n\nexport type PortableTextProps = ComponentProps<\"div\"> & {\n value: SanityKeyedArray<PortableTextBlock>;\n};\n\nexport function PortableText({ value, ...props }: PortableTextProps) {\n const { blocks } = useHandbookContext();\n\n const types: Record<string, PortableTextTypeComponent> = {\n [imageTypeName]: blockRenderer(ImageBlock),\n [videoTypeName]: blockRenderer(VideoBlock),\n [codeTypeName]: blockRenderer(CodeBlock),\n [calloutTypeName]: blockRenderer(CalloutBlock),\n [horizontalRuleTypeName]: blockRenderer(HorizontalRuleBlock),\n };\n for (const block of blocks) types[block.schema.name] = blockRenderer(block.component);\n\n return (\n <div {...props}>\n <PortableTextReact value={value} components={{ ...components, types }} />\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type BookOpenTextIconProps = ComponentProps<\"svg\">;\n\nexport function BookOpenTextIcon(props: BookOpenTextIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 7v14\" />\n <path d=\"M16 12h2\" />\n <path d=\"M16 8h2\" />\n <path d=\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\" />\n <path d=\"M6 12h2\" />\n <path d=\"M6 8h2\" />\n </svg>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\n\nimport { PortableText } from \"@/components/content/portable-text\";\nimport { BookOpenTextIcon } from \"@/icons/book-open-text\";\nimport type { SanityHandbook } from \"@/types\";\n\n/**\n * Builds a sidebar section for each guide group.\n *\n * @param handbook - The Handbook document.\n * @returns One section per group, with an entry per guide.\n */\nexport function guidesSections(handbook: SanityHandbook) {\n return handbook.groups.map(({ title, guides }) => ({\n title,\n entries: guides.map((guide) => ({\n id: guide._key,\n title: guide.title,\n description: guide.description,\n icon: createSanityIcon(BookOpenTextIcon),\n render: () => <PortableText value={guide.content} />,\n })),\n }));\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { ComponentType, ReactNode } from \"react\";\n\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { documentTypesSections } from \"@/sections/document-types\";\nimport { gettingStartedSections } from \"@/sections/getting-started\";\nimport { guidesSections } from \"@/sections/guides\";\n\n/** A page in the sidebar and the panel it opens. */\ninterface Entry {\n /** ID shared by the sidebar row and its panel. */\n id: string;\n /** Label in the sidebar and heading of the panel. */\n title: string;\n /** Description below the panel heading. */\n description?: string;\n /** Icon next to the sidebar label. */\n icon?: ComponentType;\n /** Renders the panel's content, only while the entry is selected. */\n render: () => ReactNode;\n}\n\n/** A sidebar heading and the entries below it. */\ninterface Section {\n /** Heading text. */\n title: string;\n /** Entries in the section. */\n entries: Entry[];\n}\n\n/**\n * Lists every page in the Handbook, in sidebar order.\n *\n * @returns The built-in pages, the configured document roles, and the guide groups, as sections.\n */\nexport function useSections(): Section[] {\n const { roles, handbook, loading } = useHandbookContext();\n\n return [\n ...gettingStartedSections(),\n ...documentTypesSections(roles),\n ...(loading || !isDefined(handbook) ? [] : guidesSections(handbook)),\n ];\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { ComponentProps } from \"react\";\nimport { Pane } from \"sanity/structure\";\n\nimport { ContentPanel } from \"@/components/content-panel\";\nimport { contentFlex, contentMinimumWidth } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { useSections } from \"@/hooks/use-sections\";\n\nexport type ContentProps = Omit<ComponentProps<typeof Pane>, \"id\">;\n\nexport function Content(props: ContentProps) {\n const { activeTab } = useHandbookContext();\n const sections = useSections();\n\n const entry = sections.flatMap((section) => section.entries).find(({ id }) => id === activeTab);\n\n return (\n <Pane id=\"handbook-content\" flex={contentFlex} minWidth={contentMinimumWidth} {...props}>\n {isDefined(entry) && (\n <ContentPanel id={entry.id} title={entry.title} description={entry.description}>\n {entry.render()}\n </ContentPanel>\n )}\n </Pane>\n );\n}\n","import { Box, Card, Text } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nexport type SidebarHeadingProps = ComponentProps<typeof Box> & {\n title: string;\n};\n\nexport function SidebarHeading({ title, ...props }: SidebarHeadingProps) {\n return (\n <Box paddingY={2} {...props}>\n <Card padding={2}>\n <Text size={1} muted textOverflow=\"ellipsis\" weight=\"semibold\" style={{ cursor: \"default\", outline: \"none\" }}>\n {title}\n </Text>\n </Card>\n </Box>\n );\n}\n","import { ChevronRightIcon } from \"@sanity/icons/ChevronRight\";\nimport { Box, Text } from \"@sanity/ui\";\nimport type { CSSProperties, ComponentProps, ComponentType } from \"react\";\nimport { PreviewCard, SanityDefaultPreview } from \"sanity\";\n\nimport { useHandbookContext } from \"@/contexts/handbook\";\n\nexport type SidebarTabProps = Omit<ComponentProps<typeof PreviewCard>, \"as\" | \"id\" | \"style\"> & {\n id: string;\n label: string;\n icon?: ComponentType;\n style?: CSSProperties;\n};\n\nexport function SidebarTab({ id, label, icon: Icon, style, ...props }: SidebarTabProps) {\n const { activeTab, setActiveTab, setSidebarExpanded } = useHandbookContext();\n const selected = activeTab === id;\n\n return (\n <PreviewCard\n id={id}\n as=\"button\"\n data-as=\"button\"\n selected={selected}\n marginBottom={1}\n radius={2}\n sizing=\"border\"\n tabIndex={-1}\n tone=\"inherit\"\n onClick={() => {\n setActiveTab(id);\n setSidebarExpanded(false);\n }}\n style={{ cursor: \"pointer\", ...style }}\n aria-controls={`panel-${id}`}\n __unstable_focusRing\n {...props}\n >\n <SanityDefaultPreview\n status={\n <Box style={{ opacity: 0.5 }}>\n <Text muted size={1}>\n <ChevronRightIcon />\n </Text>\n </Box>\n }\n icon={Icon}\n layout=\"compact\"\n title={label}\n />\n </PreviewCard>\n );\n}\n","import type { ComponentProps, ComponentType } from \"react\";\nimport { CommandList } from \"sanity\";\nimport { Pane, PaneContent } from \"sanity/structure\";\n\nimport { PaneHeader } from \"@/components/pane-header\";\nimport { SidebarHeading } from \"@/components/sidebar/heading\";\nimport { SidebarTab } from \"@/components/sidebar/tab\";\nimport { sidebarItemHeight, sidebarMaximumWidth, sidebarMinimumWidth, sidebarWidth } from \"@/config/layout\";\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { useSections } from \"@/hooks/use-sections\";\n\n/** A heading above a group of sidebar tabs. */\ninterface SidebarHeadingItem {\n /** Marks the item as a heading. */\n type: \"heading\";\n /** Heading text. */\n title: string;\n}\n\n/** A sidebar row that opens the content panel with the same ID. */\ninterface SidebarTabItem {\n /** Marks the item as a tab. */\n type: \"tab\";\n /** ID shared by the sidebar row and its panel. */\n id: string;\n /** Label in the sidebar. */\n label: string;\n /** Icon next to the sidebar label. */\n icon?: ComponentType;\n}\n\n/** An item in the sidebar's flat list. */\ntype SidebarItem = SidebarHeadingItem | SidebarTabItem;\n\n// `CommandList` clones what this returns to set `tabIndex`, so a wrapper component would swallow it.\nfunction renderItem(item: SidebarItem) {\n if (item.type === \"heading\") return <SidebarHeading title={item.title} />;\n\n return <SidebarTab id={item.id} label={item.label} icon={item.icon} />;\n}\n\nexport type SidebarProps = Omit<ComponentProps<typeof Pane>, \"id\">;\n\nexport function Sidebar(props: SidebarProps) {\n const { sidebarTitle } = useHandbookContext();\n const sections = useSections();\n\n const items = sections.flatMap(({ title, entries }): SidebarItem[] => [\n { type: \"heading\", title },\n ...entries.map((entry): SidebarItem => ({ type: \"tab\", id: entry.id, label: entry.title, icon: entry.icon })),\n ]);\n\n function getItemDisabled(virtualIndex: number) {\n return items[virtualIndex]?.type === \"heading\";\n }\n\n return (\n <Pane\n id=\"handbook-sidebar\"\n currentMaxWidth={sidebarWidth}\n minWidth={sidebarMinimumWidth}\n maxWidth={sidebarMaximumWidth}\n {...props}\n >\n <PaneHeader title={sidebarTitle} />\n <PaneContent overflow=\"auto\">\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={sidebarTitle}\n canReceiveFocus\n getItemDisabled={getItemDisabled}\n itemHeight={sidebarItemHeight}\n items={items}\n onlyShowSelectionWhenActive\n paddingBottom={1}\n paddingX={3}\n renderItem={renderItem}\n wrapAround={false}\n />\n </PaneContent>\n </Pane>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { useContext } from \"react\";\nimport { PaneLayoutContext } from \"sanity/_singletons\";\n\nimport { useHandbookContext } from \"@/contexts/handbook\";\nimport { Content } from \"@/layouts/content\";\nimport { Sidebar } from \"@/layouts/sidebar\";\n\nexport function Panes() {\n const { activeTab, sidebarExpanded } = useHandbookContext();\n const paneLayout = useContext(PaneLayoutContext);\n\n const hasContent = isDefined(activeTab);\n\n if (paneLayout?.collapsed === true) {\n return sidebarExpanded || !hasContent ? <Sidebar /> : <Content />;\n }\n\n return (\n <>\n <Sidebar />\n {hasContent && <Content />}\n </>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { useTheme_v2 } from \"@sanity/ui\";\nimport { useState } from \"react\";\nimport type { Tool } from \"sanity\";\nimport { PaneLayout } from \"sanity/structure\";\n\nimport { toolMinimumWidth } from \"@/config/layout\";\nimport { HandbookProvider } from \"@/contexts/handbook\";\nimport type { HandbookProviderConfig } from \"@/contexts/handbook\";\nimport { Panes } from \"@/layouts/panes\";\n\nexport interface HandbookToolProps {\n tool: Tool<HandbookProviderConfig>;\n}\n\nexport function HandbookTool({ tool: { options } }: HandbookToolProps) {\n const { media } = useTheme_v2();\n const [layoutCollapsed, setLayoutCollapsed] = useState(false);\n\n function handleCollapse() {\n setLayoutCollapsed(true);\n }\n\n function handleExpand() {\n setLayoutCollapsed(false);\n }\n\n if (!isDefined(options)) return null;\n\n return (\n <HandbookProvider {...options}>\n <PaneLayout\n flex={1}\n height={layoutCollapsed ? undefined : \"fill\"}\n minWidth={media[1]}\n onCollapse={handleCollapse}\n onExpand={handleExpand}\n style={{ minHeight: \"100%\", minWidth: `${toolMinimumWidth}px` }}\n >\n <Panes />\n </PaneLayout>\n </HandbookProvider>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\n\n/** Editors from the plugin configuration, so the structure helper doesn't need them passed again. */\nlet configuredEditors: string[] | undefined = undefined;\n\n/**\n * Stores the editors from the plugin configuration. A Studio with several workspaces keeps only the last\n * workspace's list, so pass the list explicitly there.\n *\n * @param editors - Email addresses of the editors.\n */\nexport function setConfiguredEditors(editors: string[] | undefined) {\n configuredEditors = editors;\n}\n\n/**\n * Checks whether an email address belongs to an editor. Without an editors list, everyone is an editor.\n *\n * @param editors - Email addresses of the editors, defaulting to the configured list.\n * @param email - The email address to check.\n * @returns Whether the address belongs to an editor.\n */\nexport function isPermittedEditor(editors: string[] | undefined, email: string | undefined) {\n const permitted = editors ?? configuredEditors;\n\n if (!isDefined(permitted)) return true;\n if (!isDefined(email)) return false;\n\n return permitted.includes(email);\n}\n","import { Stack } from \"@sanity/ui\";\nimport type { PreviewProps } from \"sanity\";\n\nimport { CalloutContent } from \"@/components/blocks/callout/content\";\nimport type { SanityHandbookCallout, SanityHandbookCalloutVariant } from \"@/types\";\n\nexport type CalloutPreviewProps = PreviewProps & {\n variant?: SanityHandbookCalloutVariant;\n body?: SanityHandbookCallout[\"body\"];\n};\n\nexport function CalloutPreview({ variant, body }: CalloutPreviewProps) {\n return (\n <CalloutContent variant={variant ?? \"tip\"}>\n <Stack gap={3}>\n {body?.map(({ _key, children }) => (\n <div key={_key} style={{ whiteSpace: \"pre-wrap\" }}>\n {children.map((child) => child.text).join(\"\")}\n </div>\n ))}\n </Stack>\n </CalloutContent>\n );\n}\n","import type { BlockDecoratorProps } from \"sanity\";\n\nimport { PortableCode } from \"@/components/content/portable/code\";\n\nexport function CodeDecorator({ children }: BlockDecoratorProps) {\n return <PortableCode>{children}</PortableCode>;\n}\n","import type { BlockStyleProps } from \"sanity\";\n\nimport { PortableBlockquote } from \"@/components/content/portable/blockquote\";\nimport { PortableHeading } from \"@/components/content/portable/heading\";\nimport { PortableParagraph } from \"@/components/content/portable/paragraph\";\n\nexport function ParagraphStyle({ children }: BlockStyleProps) {\n return <PortableParagraph>{children}</PortableParagraph>;\n}\n\nexport function HeadingStyle({ children }: BlockStyleProps) {\n return <PortableHeading>{children}</PortableHeading>;\n}\n\nexport function BlockquoteStyle({ children }: BlockStyleProps) {\n return <PortableBlockquote>{children}</PortableBlockquote>;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type MessageCircleIconProps = ComponentProps<\"svg\">;\n\nexport function MessageCircleIcon(props: MessageCircleIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\" />\n </svg>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type LinkIconProps = ComponentProps<\"svg\">;\n\nexport function LinkIcon(props: LinkIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { defineArrayMember, defineField } from \"sanity\";\n\nimport { LinkIcon } from \"@/icons/link\";\nimport type { SanityHandbookLink } from \"@/types\";\n\nexport const linkAnnotation = defineArrayMember({\n name: \"link\" satisfies SanityHandbookLink[\"_type\"],\n type: \"object\",\n description: \"Link applied to the selected text.\",\n icon: createSanityIcon(LinkIcon),\n preview: {\n select: {\n href: \"href\",\n },\n prepare(selection: { href?: string }) {\n const { href } = selection;\n\n return {\n title: href ?? \"Link\",\n };\n },\n },\n fields: [\n defineField({\n name: \"href\" satisfies keyof SanityHandbookLink,\n type: \"url\",\n title: \"URL\",\n description: \"Web address to link to. Use http, https, mailto, or tel.\",\n validation: (rule) => rule.uri({ scheme: [\"http\", \"https\", \"mailto\", \"tel\"] }),\n }),\n ],\n});\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { defineArrayMember, defineField, defineType } from \"sanity\";\n\nimport { CalloutPreview } from \"@/components/blocks/callout/preview\";\nimport { CodeDecorator } from \"@/components/decorators\";\nimport { ParagraphStyle } from \"@/components/styles\";\nimport { MessageCircleIcon } from \"@/icons/message-circle\";\nimport { linkAnnotation } from \"@/schemas/annotations/link\";\nimport type { SanityHandbookCallout, SanityHandbookCalloutVariant } from \"@/types\";\nimport { calloutTypeName } from \"@/types\";\n\nexport const calloutType = defineType({\n name: calloutTypeName satisfies SanityHandbookCallout[\"_type\"],\n type: \"object\",\n title: \"Callout\",\n description: \"Highlighted tip, note, or warning.\",\n icon: createSanityIcon(MessageCircleIcon),\n components: {\n preview: CalloutPreview,\n },\n preview: {\n select: {\n variant: \"variant\",\n body: \"body\",\n },\n prepare(selection: { variant?: SanityHandbookCalloutVariant; body?: SanityHandbookCallout[\"body\"] }) {\n const { variant, body } = selection;\n\n return {\n title: \"Callout\",\n variant,\n body,\n };\n },\n },\n fields: [\n defineField({\n name: \"variant\" satisfies keyof SanityHandbookCallout,\n type: \"string\",\n description: \"Kind of callout, which sets its icon and color.\",\n initialValue: \"tip\",\n validation: (rule) => rule.required(),\n options: {\n list: [\n { title: \"Tip\", value: \"tip\" },\n { title: \"Information\", value: \"info\" },\n { title: \"Warning\", value: \"warning\" },\n ],\n layout: \"radio\",\n direction: \"horizontal\",\n },\n }),\n defineField({\n name: \"body\" satisfies keyof SanityHandbookCallout,\n type: \"array\",\n description: \"Text inside the callout, with inline formatting and links.\",\n of: [\n defineArrayMember({\n name: \"block\",\n type: \"block\",\n styles: [{ title: \"Normal\", value: \"normal\", component: ParagraphStyle }],\n lists: [],\n marks: {\n decorators: [\n { title: \"Bold\", value: \"strong\" },\n { title: \"Italic\", value: \"em\" },\n { title: \"Strikethrough\", value: \"strike-through\" },\n { title: \"Code\", value: \"code\", component: CodeDecorator },\n ],\n annotations: [linkAnnotation],\n },\n }),\n ],\n }),\n ],\n});\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { PreviewProps } from \"sanity\";\n\nimport { CodeContent } from \"@/components/blocks/code/content\";\n\nexport type CodePreviewProps = PreviewProps & {\n code?: string;\n language?: string;\n};\n\nexport function CodePreview({ code, language }: CodePreviewProps) {\n if (!isDefined(code)) return null;\n\n return <CodeContent code={code} language={language} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type CodeIconProps = ComponentProps<\"svg\">;\n\nexport function CodeIcon(props: CodeIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m16 18 6-6-6-6\" />\n <path d=\"m8 6-6 6 6 6\" />\n </svg>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { defineField, defineType } from \"sanity\";\n\nimport { CodePreview } from \"@/components/blocks/code/preview\";\nimport { CodeIcon } from \"@/icons/code\";\nimport type { SanityHandbookCode } from \"@/types\";\nimport { codeTypeName } from \"@/types\";\n\nexport const codeType = defineType({\n name: codeTypeName satisfies SanityHandbookCode[\"_type\"],\n type: \"object\",\n title: \"Code\",\n description: \"Code block with syntax highlighting.\",\n icon: createSanityIcon(CodeIcon),\n components: {\n preview: CodePreview,\n },\n preview: {\n select: {\n code: \"code\",\n language: \"language\",\n },\n },\n fields: [\n defineField({\n name: \"code\" satisfies keyof SanityHandbookCode,\n type: \"text\",\n description: \"Code to display.\",\n }),\n defineField({\n name: \"language\" satisfies keyof SanityHandbookCode,\n type: \"string\",\n description: \"Language used for syntax highlighting.\",\n options: {\n list: [\n { title: \"CSS\", value: \"css\" },\n { title: \"GROQ\", value: \"groq\" },\n { title: \"HTML\", value: \"html\" },\n { title: \"JavaScript\", value: \"javascript\" },\n { title: \"JSON\", value: \"json\" },\n { title: \"Plain Text\", value: \"text\" },\n { title: \"React\", value: \"tsx\" },\n { title: \"Shell\", value: \"shell\" },\n { title: \"TypeScript\", value: \"typescript\" },\n ],\n },\n }),\n ],\n});\n","import type { PreviewProps } from \"sanity\";\n\nimport { HorizontalRuleContent } from \"@/components/blocks/horizontal-rule/content\";\n\nexport type HorizontalRulePreviewProps = PreviewProps;\n\nexport function HorizontalRulePreview(_props: HorizontalRulePreviewProps) {\n return <HorizontalRuleContent style={{ marginBlock: 8 }} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type SeparatorHorizontalIconProps = ComponentProps<\"svg\">;\n\nexport function SeparatorHorizontalIcon(props: SeparatorHorizontalIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m16 16-4 4-4-4\" />\n <path d=\"M3 12h18\" />\n <path d=\"m8 8 4-4 4 4\" />\n </svg>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { defineField, defineType } from \"sanity\";\n\nimport { HorizontalRulePreview } from \"@/components/blocks/horizontal-rule/preview\";\nimport { SeparatorHorizontalIcon } from \"@/icons/separator-horizontal\";\nimport type { SanityHandbookHorizontalRule } from \"@/types\";\nimport { horizontalRuleTypeName } from \"@/types\";\n\nexport const horizontalRuleType = defineType({\n name: horizontalRuleTypeName satisfies SanityHandbookHorizontalRule[\"_type\"],\n type: \"object\",\n title: \"Horizontal Rule\",\n description: \"Divider between sections.\",\n icon: createSanityIcon(SeparatorHorizontalIcon),\n components: {\n preview: HorizontalRulePreview,\n },\n preview: {\n prepare() {\n return {\n title: \"Horizontal Rule\",\n };\n },\n },\n fields: [\n // Sanity requires at least one field, but a rule has nothing to store.\n defineField({\n name: \"style\",\n type: \"string\",\n description: \"Unused placeholder field.\",\n hidden: true,\n }),\n ],\n});\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { PreviewProps } from \"sanity\";\n\nimport { ImageContent } from \"@/components/blocks/image/content\";\n\nexport type ImagePreviewProps = PreviewProps & {\n url?: string;\n alt?: string;\n caption?: string;\n};\n\nexport function ImagePreview({ url, alt, caption }: ImagePreviewProps) {\n if (!isDefined(url)) return null;\n\n return <ImageContent url={url} alt={alt} caption={caption} style={{ padding: 8 }} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type ImageIconProps = ComponentProps<\"svg\">;\n\nexport function ImageIcon(props: ImageIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { defineField, defineType } from \"sanity\";\n\nimport { ImagePreview } from \"@/components/blocks/image/preview\";\nimport { ImageIcon } from \"@/icons/image\";\nimport type { SanityHandbookImage } from \"@/types\";\nimport { imageTypeName } from \"@/types\";\n\nexport const imageType = defineType({\n name: imageTypeName satisfies SanityHandbookImage[\"_type\"],\n type: \"object\",\n title: \"Image\",\n description: \"Image with an optional caption and alternative text.\",\n icon: createSanityIcon(ImageIcon),\n components: {\n preview: ImagePreview,\n },\n preview: {\n select: {\n caption: \"caption\",\n alt: \"alt\",\n url: \"asset.asset.url\",\n },\n },\n fields: [\n defineField({\n name: \"asset\" satisfies keyof SanityHandbookImage,\n type: \"image\",\n title: \"Image\",\n description: \"Image to show.\",\n options: { hotspot: true },\n }),\n defineField({\n name: \"caption\" satisfies keyof SanityHandbookImage,\n type: \"string\",\n description: \"Text shown below the image, such as a credit.\",\n }),\n defineField({\n name: \"alt\" satisfies keyof SanityHandbookImage,\n type: \"string\",\n title: \"Alternative Text\",\n description: \"Description of the image for people who can't see it. Don't repeat the caption.\",\n }),\n ],\n});\n","import { isDefined } from \"@repo/lib/utils\";\nimport type { PreviewProps } from \"sanity\";\n\nimport { VideoContent } from \"@/components/blocks/video/content\";\n\nexport type VideoPreviewProps = PreviewProps & {\n url?: string;\n caption?: string;\n};\n\nexport function VideoPreview({ url, caption }: VideoPreviewProps) {\n if (!isDefined(url)) return null;\n\n return <VideoContent url={url} caption={caption} style={{ padding: 8 }} />;\n}\n","import type { ComponentProps } from \"react\";\n\nexport type FilmIconProps = ComponentProps<\"svg\">;\n\nexport function FilmIcon(props: FilmIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M7 3v18\" />\n <path d=\"M3 7.5h4\" />\n <path d=\"M3 12h18\" />\n <path d=\"M3 16.5h4\" />\n <path d=\"M17 3v18\" />\n <path d=\"M17 7.5h4\" />\n <path d=\"M17 16.5h4\" />\n </svg>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { defineField, defineType } from \"sanity\";\n\nimport { VideoPreview } from \"@/components/blocks/video/preview\";\nimport { FilmIcon } from \"@/icons/film\";\nimport type { SanityHandbookVideo } from \"@/types\";\nimport { videoTypeName } from \"@/types\";\n\nexport const videoType = defineType({\n name: videoTypeName satisfies SanityHandbookVideo[\"_type\"],\n type: \"object\",\n title: \"Video\",\n description: \"Video with an optional caption.\",\n icon: createSanityIcon(FilmIcon),\n components: {\n preview: VideoPreview,\n },\n preview: {\n select: {\n caption: \"caption\",\n url: \"asset.asset.url\",\n },\n },\n fields: [\n defineField({\n name: \"asset\" satisfies keyof SanityHandbookVideo,\n type: \"file\",\n title: \"Video\",\n description: \"Video to show.\",\n options: { accept: \"video/*\" },\n }),\n defineField({\n name: \"caption\" satisfies keyof SanityHandbookVideo,\n type: \"string\",\n description: \"Text shown below the video, such as a credit.\",\n }),\n ],\n});\n","import { Text } from \"@sanity/ui\";\nimport type { BlockListItemProps } from \"sanity\";\n\nexport function ListItemStyle({ children }: BlockListItemProps) {\n return (\n <Text size={1} style={{ marginTop: \"0.375em\" }}>\n {children}\n </Text>\n );\n}\n","import { defineArrayMember, defineField } from \"sanity\";\n\nimport { CodeDecorator } from \"@/components/decorators\";\nimport { ListItemStyle } from \"@/components/lists\";\nimport { BlockquoteStyle, HeadingStyle, ParagraphStyle } from \"@/components/styles\";\nimport type { SanityHandbookBlockDefinition } from \"@/plugin\";\nimport { linkAnnotation } from \"@/schemas/annotations/link\";\nimport type { SanityHandbookGuide } from \"@/types\";\nimport { calloutTypeName, codeTypeName, horizontalRuleTypeName, imageTypeName, videoTypeName } from \"@/types\";\n\n/**\n * Creates the guide content field, offering the built-in blocks and any custom ones.\n *\n * @param customBlocks - Custom blocks added by the site.\n * @returns The content field.\n */\nexport function createGuideContentField(customBlocks: SanityHandbookBlockDefinition[] = []) {\n return defineField({\n name: \"content\" satisfies keyof SanityHandbookGuide,\n type: \"array\",\n description: \"Rich text with formatting, headings, lists, images, code blocks, and custom blocks.\",\n of: [\n defineArrayMember({\n name: \"block\",\n type: \"block\",\n styles: [\n { title: \"Paragraph\", value: \"normal\", component: ParagraphStyle },\n { title: \"Heading\", value: \"h2\", component: HeadingStyle },\n { title: \"Blockquote\", value: \"blockquote\", component: BlockquoteStyle },\n ],\n lists: [\n { title: \"Bullet\", value: \"bullet\", component: ListItemStyle },\n { title: \"Number\", value: \"number\", component: ListItemStyle },\n ],\n marks: {\n decorators: [\n { title: \"Bold\", value: \"strong\" },\n { title: \"Italic\", value: \"em\" },\n { title: \"Strikethrough\", value: \"strike-through\" },\n { title: \"Code\", value: \"code\", component: CodeDecorator },\n ],\n annotations: [linkAnnotation],\n },\n }),\n defineArrayMember({ name: imageTypeName, type: imageTypeName }),\n defineArrayMember({ name: videoTypeName, type: videoTypeName }),\n defineArrayMember({ name: codeTypeName, type: codeTypeName }),\n defineArrayMember({ name: calloutTypeName, type: calloutTypeName }),\n defineArrayMember({ name: horizontalRuleTypeName, type: horizontalRuleTypeName }),\n ...customBlocks.map((block) => defineArrayMember({ name: block.schema.name, type: block.schema.name })),\n ],\n });\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { defineField, defineType } from \"sanity\";\n\nimport { defaultDocumentTitle } from \"@/config/defaults\";\nimport { BookOpenTextIcon } from \"@/icons/book-open-text\";\nimport type { SanityHandbookBlockDefinition } from \"@/plugin\";\nimport { createGuideContentField } from \"@/schemas/fields/content\";\nimport type { SanityHandbookGuide } from \"@/types\";\nimport { guideTypeName } from \"@/types\";\n\n/**\n * Creates the guide document type, with a content field offering the built-in blocks and any custom ones.\n *\n * @param customBlocks - Custom blocks added by the site.\n * @returns The guide document type.\n */\nexport function createGuideType(customBlocks: SanityHandbookBlockDefinition[] = []) {\n return defineType({\n name: guideTypeName satisfies SanityHandbookGuide[\"_type\"],\n type: \"document\",\n title: \"Handbook Guide\",\n description: \"Handbook page written in rich text.\",\n icon: createSanityIcon(BookOpenTextIcon),\n preview: {\n select: {\n title: \"title\",\n description: \"description\",\n },\n prepare(selection: { title?: string; description?: string }) {\n const { title, description } = selection;\n\n return {\n title: title ?? defaultDocumentTitle,\n subtitle: description,\n };\n },\n },\n fields: [\n defineField({\n name: \"title\" satisfies keyof SanityHandbookGuide,\n type: \"string\",\n description: \"Title shown in the Handbook sidebar and as the guide heading.\",\n validation: (rule) => rule.required(),\n }),\n defineField({\n name: \"description\" satisfies keyof SanityHandbookGuide,\n type: \"string\",\n description: \"Short introduction shown below the heading.\",\n }),\n createGuideContentField(customBlocks),\n ],\n });\n}\n","import type { ComponentProps } from \"react\";\n\nexport type ListPlusIconProps = ComponentProps<\"svg\">;\n\nexport function ListPlusIcon(props: ListPlusIconProps) {\n return (\n <svg\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 strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M16 5H3\" />\n <path d=\"M11 12H3\" />\n <path d=\"M16 19H3\" />\n <path d=\"M18 9v6\" />\n <path d=\"M21 12h-6\" />\n </svg>\n );\n}\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport { isDefined } from \"@repo/lib/utils\";\nimport { defineArrayMember, defineField, defineType } from \"sanity\";\n\nimport { BookTextIcon } from \"@/icons/book-text\";\nimport { ListPlusIcon } from \"@/icons/list-plus\";\nimport type { SanityHandbook, SanityHandbookGuideGroup } from \"@/types\";\nimport { guideTypeName, handbookTypeName } from \"@/types\";\n\nexport const handbookType = defineType({\n name: handbookTypeName satisfies SanityHandbook[\"_type\"],\n type: \"document\",\n title: \"Handbook\",\n description: \"Groups of guides shown in the Handbook sidebar, in order.\",\n icon: createSanityIcon(BookTextIcon),\n preview: {\n prepare() {\n return {\n title: \"Handbook\",\n };\n },\n },\n fields: [\n defineField({\n name: \"groups\" satisfies keyof SanityHandbook,\n type: \"array\",\n description:\n \"Groups of guides shown in the Handbook sidebar, in order. Each group has a title and a list of guides, also in order.\",\n of: [\n defineArrayMember({\n name: \"group\",\n type: \"object\",\n description: \"Sidebar section holding a list of guides.\",\n icon: createSanityIcon(ListPlusIcon),\n fields: [\n defineField({\n name: \"title\" satisfies keyof SanityHandbookGuideGroup,\n type: \"string\",\n description: \"Heading shown above the group in the sidebar.\",\n validation: (rule) => rule.required(),\n }),\n defineField({\n name: \"guides\" satisfies keyof SanityHandbookGuideGroup,\n type: \"array\",\n description: \"Guides in the group, in order. Drag to reorder.\",\n of: [\n defineArrayMember({\n name: \"guide\",\n type: \"reference\",\n to: [{ type: guideTypeName }],\n }),\n ],\n }),\n ],\n preview: {\n select: {\n title: \"title\",\n guide0: \"guides.0.title\",\n guide1: \"guides.1.title\",\n guide2: \"guides.2.title\",\n },\n prepare(selection: { title?: string; guide0?: string; guide1?: string; guide2?: string }) {\n const { title, guide0, guide1, guide2 } = selection;\n\n const all = [guide0, guide1, guide2].filter((guide): guide is string => isDefined(guide));\n const shown = all.slice(0, 2);\n const hasMore = isDefined(guide2);\n\n function formatSubtitle() {\n if (!isDefined(shown)) return \"No guides selected\";\n if (hasMore) return `${shown.join(\", \")}, and others`;\n return shown.join(\" and \");\n }\n\n return {\n title: title ?? \"Group\",\n subtitle: formatSubtitle(),\n };\n },\n },\n }),\n ],\n }),\n ],\n});\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport type { ComponentType } from \"react\";\nimport { definePlugin } from \"sanity\";\nimport type { DocumentDefinition, PortableTextObject, SchemaTypeDefinition } from \"sanity\";\n\nimport { defaultTitle, defaultUndocumentedFieldMessage, pluginName } from \"@/config/defaults\";\nimport { documentTypes, singletonTypes } from \"@/config/documents\";\nimport type { HandbookProviderConfig } from \"@/contexts/handbook\";\nimport { BookTextIcon } from \"@/icons/book-text\";\nimport { HandbookTool } from \"@/layouts/tool\";\nimport { isPermittedEditor, setConfiguredEditors } from \"@/lib/editors\";\nimport { calloutType } from \"@/schemas/blocks/callout\";\nimport { codeType } from \"@/schemas/blocks/code\";\nimport { horizontalRuleType } from \"@/schemas/blocks/horizontal-rule\";\nimport { imageType } from \"@/schemas/blocks/image\";\nimport { videoType } from \"@/schemas/blocks/video\";\nimport { createGuideType } from \"@/schemas/types/guide\";\nimport { handbookType } from \"@/schemas/types/handbook\";\n\ndeclare module \"@sanity/types\" {\n interface FieldDefinitionBase {\n /** Handbook documentation for the field. */\n handbook?: SanityHandbookMetadata;\n }\n\n // oxlint-disable-next-line no-shadow -- Module augmentation intentionally redeclares the imported type.\n interface DocumentDefinition {\n /** Handbook documentation for the document type. */\n handbook?: SanityHandbookMetadata;\n }\n}\n\n/**\n * Documentation added to a field or document definition, shown in the Handbook.\n *\n * @public\n */\nexport interface SanityHandbookMetadata {\n /** Title to show instead of the schema title. */\n title?: string;\n /** Description shown below the field or document heading. */\n description?: string;\n /** Example value for the field. */\n example?: string;\n /** Tip, shown as a hint icon. */\n tip?: string;\n /** Extra information, shown as a hint icon. */\n info?: string;\n /** Warning, shown as a hint icon. */\n caution?: string;\n}\n\n/**\n * A group of document types with the same role in the content model, shown as one sidebar section.\n *\n * @public\n */\nexport interface SanityHandbookDocumentRole {\n /** Role title. */\n title: string;\n /** Short description of the role. */\n description?: string;\n /** Document definitions in the role. */\n documents: DocumentDefinition[];\n}\n\n/**\n * A custom Portable Text block for guides: its schema and the component that renders it.\n *\n * @public\n */\nexport interface SanityHandbookBlockDefinition {\n /** Schema type definition for the block. */\n schema: SchemaTypeDefinition;\n /** Component that renders the block in the Handbook. */\n component: ComponentType<{ value: PortableTextObject }>;\n}\n\n/**\n * Plugin configuration. Only `roles` is required.\n *\n * @public\n */\nexport interface SanityHandbookConfig {\n /** Title in the Studio's tool menu. Defaults to `\"Handbook\"`. */\n title?: string;\n /** Heading at the top of the sidebar. Defaults to `\"Handbook\"`. */\n sidebarTitle?: string;\n /** Document roles, each shown as a section in the sidebar. */\n roles: SanityHandbookDocumentRole[];\n /** Custom Portable Text blocks for guides. Defaults to none. */\n blocks?: SanityHandbookBlockDefinition[];\n /** Email addresses of the people who can edit Handbook documents. Defaults to everyone. */\n editors?: string[];\n /** Message shown for fields without a description. Defaults to a prompt to ask the development team. */\n undocumentedFieldMessage?: string;\n}\n\n/**\n * Adds a Handbook tool to Sanity Studio, with documentation generated from the schema and guides written\n * in the Studio.\n *\n * @param config - The plugin configuration.\n * @returns The plugin.\n * @public\n */\nexport const handbookPlugin = definePlugin<SanityHandbookConfig>((config) => {\n const { title, sidebarTitle, roles, blocks, editors, undocumentedFieldMessage } = config;\n\n setConfiguredEditors(editors);\n\n const resolved: HandbookProviderConfig = {\n sidebarTitle: sidebarTitle ?? defaultTitle,\n roles,\n blocks: blocks ?? [],\n undocumentedFieldMessage: undocumentedFieldMessage ?? defaultUndocumentedFieldMessage,\n };\n\n const guideType = createGuideType(resolved.blocks);\n\n return {\n name: pluginName,\n schema: {\n types: [\n handbookType,\n guideType,\n imageType,\n videoType,\n codeType,\n calloutType,\n horizontalRuleType,\n ...resolved.blocks.map((block) => block.schema),\n ],\n },\n document: {\n newDocumentOptions: (templateItems, { creationContext, currentUser }) => {\n if (creationContext.type !== \"global\" && creationContext.type !== \"structure\") {\n return templateItems;\n }\n\n const hiddenTypes = isPermittedEditor(editors, currentUser?.email) ? singletonTypes : documentTypes;\n\n return templateItems.filter(\n ({ templateId }) =>\n ![...hiddenTypes].some((type) => templateId === type || templateId.startsWith(`${type}-`)),\n );\n },\n actions: (actionComponents, { schemaType }) => {\n if (singletonTypes.has(schemaType)) {\n return actionComponents.filter(({ action }) => ![\"delete\", \"duplicate\", \"unpublish\"].includes(action ?? \"\"));\n }\n\n return actionComponents;\n },\n },\n tools: [\n {\n name: \"handbook\",\n title: title ?? defaultTitle,\n icon: createSanityIcon(BookTextIcon),\n component: HandbookTool,\n options: resolved,\n },\n ],\n };\n});\n","import { createSanityIcon } from \"@repo/lib/icons\";\nimport type { CurrentUser } from \"sanity\";\nimport type { StructureBuilder } from \"sanity/structure\";\n\nimport { BookOpenTextIcon } from \"@/icons/book-open-text\";\nimport { BookTextIcon } from \"@/icons/book-text\";\nimport { isPermittedEditor } from \"@/lib/editors\";\nimport { guideTypeName, handbookTypeName } from \"@/types\";\n\n/**\n * Creates Structure tool items for the Handbook documents, or none when the current user can't edit them.\n *\n * @param structureBuilder - The structure builder.\n * @param context - The structure context, with the current user.\n * @param editors - Email addresses of the editors, defaulting to the configured list.\n * @returns List items for the Handbook document and the guides list, oldest guide first.\n * @public\n */\nexport function handbookStructure(\n structureBuilder: StructureBuilder,\n context: { currentUser: CurrentUser | null },\n editors?: string[],\n) {\n if (!isPermittedEditor(editors, context.currentUser?.email)) return [];\n\n const { listItem, document, documentTypeList } = structureBuilder;\n\n return [\n listItem()\n .title(\"Handbook\")\n .icon(createSanityIcon(BookTextIcon))\n .child(document().id(handbookTypeName).schemaType(handbookTypeName).title(\"Handbook\")),\n listItem()\n .title(\"Handbook Guides\")\n .icon(createSanityIcon(BookOpenTextIcon))\n .child(\n documentTypeList(guideTypeName)\n .title(\"Handbook Guides\")\n .defaultOrdering([{ field: \"_createdAt\", direction: \"asc\" }]),\n ),\n ];\n}\n","import { useCurrentUser } from \"sanity\";\n\nimport { isPermittedEditor } from \"@/lib/editors\";\n\n/**\n * Checks whether the current user can edit Handbook documents. Without an editors list, everyone can.\n *\n * @param editors - Email addresses of the editors, defaulting to the configured list.\n * @returns Whether the current user can edit Handbook documents.\n * @public\n */\nexport function useIsHandbookEditor(editors?: string[]) {\n const user = useCurrentUser();\n\n return isPermittedEditor(editors, user?.email);\n}\n"],"mappings":"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"}