sanity 6.9.2 → 6.9.3-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/lib/{AddonDatasetProvider-CIq0vehp.js → AddonDatasetProvider-DDQrh5ob.js} +2 -2
  2. package/lib/{AddonDatasetProvider-CIq0vehp.js.map → AddonDatasetProvider-DDQrh5ob.js.map} +1 -1
  3. package/lib/{CalendarFilter-DRKSPTWd.js → CalendarFilter-DYbHmp_x.js} +3 -3
  4. package/lib/{CalendarFilter-DRKSPTWd.js.map → CalendarFilter-DYbHmp_x.js.map} +1 -1
  5. package/lib/{CommentsDocumentLayout-NGghzPWZ.js → CommentsDocumentLayout-qdF_HKSC.js} +2 -2
  6. package/lib/{CommentsDocumentLayout-NGghzPWZ.js.map → CommentsDocumentLayout-qdF_HKSC.js.map} +1 -1
  7. package/lib/{CommentsField-_QkW9aLe.js → CommentsField-i8xs45PB.js} +3 -3
  8. package/lib/{CommentsField-_QkW9aLe.js.map → CommentsField-i8xs45PB.js.map} +1 -1
  9. package/lib/{CommentsInput-DdtI0Naj.js → CommentsInput-B9iSSi8A.js} +6 -6
  10. package/lib/{CommentsInput-DdtI0Naj.js.map → CommentsInput-B9iSSi8A.js.map} +1 -1
  11. package/lib/{CommentsInspector-BQtqxGsK.js → CommentsInspector-rGGP9buL.js} +5 -5
  12. package/lib/{CommentsInspector-BQtqxGsK.js.map → CommentsInspector-rGGP9buL.js.map} +1 -1
  13. package/lib/{CommentsListItem-B0yR0R5a.js → CommentsListItem-DKS6V_TV.js} +3 -3
  14. package/lib/{CommentsListItem-B0yR0R5a.js.map → CommentsListItem-DKS6V_TV.js.map} +1 -1
  15. package/lib/{CommentsSelectedPathProvider-BYZ2OmJ9.js → CommentsSelectedPathProvider-BnZ6GdNc.js} +3 -3
  16. package/lib/{CommentsSelectedPathProvider-BYZ2OmJ9.js.map → CommentsSelectedPathProvider-BnZ6GdNc.js.map} +1 -1
  17. package/lib/{CommentsStudioLayout-DK4W-hTe.js → CommentsStudioLayout-YlpSH_2Y.js} +4 -4
  18. package/lib/{CommentsStudioLayout-DK4W-hTe.js.map → CommentsStudioLayout-YlpSH_2Y.js.map} +1 -1
  19. package/lib/{DateInputs-enUB1fG8.js → DateInputs-DioSKqY0.js} +7 -7
  20. package/lib/{DateInputs-enUB1fG8.js.map → DateInputs-DioSKqY0.js.map} +1 -1
  21. package/lib/{DocumentStatusIndicator-BP3N2GwG.js → DocumentStatusIndicator-BPBTH84U.js} +5 -5
  22. package/lib/{DocumentStatusIndicator-BP3N2GwG.js.map → DocumentStatusIndicator-BPBTH84U.js.map} +1 -1
  23. package/lib/{FormValue-4tVuOoGw.js → FormValue-CJg43LyM.js} +2 -2
  24. package/lib/{FormValue-4tVuOoGw.js.map → FormValue-CJg43LyM.js.map} +1 -1
  25. package/lib/{LoadingBlock-Cy2Pckab.js → LoadingBlock-DPTVJ58M.js} +3 -3
  26. package/lib/{LoadingBlock-Cy2Pckab.js.map → LoadingBlock-DPTVJ58M.js.map} +1 -1
  27. package/lib/{ReleaseTitle-CkEMIfmx.js → ReleaseTitle-ln13W3P1.js} +4 -4
  28. package/lib/{ReleaseTitle-CkEMIfmx.js.map → ReleaseTitle-ln13W3P1.js.map} +1 -1
  29. package/lib/{ReleasesMetadataProvider-DuAzHgpz.js → ReleasesMetadataProvider-DbxROVyw.js} +2 -2
  30. package/lib/{ReleasesMetadataProvider-DuAzHgpz.js.map → ReleasesMetadataProvider-DbxROVyw.js.map} +1 -1
  31. package/lib/{ReleasesNav-DozstCwb.js → ReleasesNav-DNwncim0.js} +15 -15
  32. package/lib/{ReleasesNav-DozstCwb.js.map → ReleasesNav-DNwncim0.js.map} +1 -1
  33. package/lib/{ReleasesStudioLayout-CXoRbIpf.js → ReleasesStudioLayout-gzl7rMMp.js} +8 -8
  34. package/lib/{ReleasesStudioLayout-CXoRbIpf.js.map → ReleasesStudioLayout-gzl7rMMp.js.map} +1 -1
  35. package/lib/{ReleasesTool-Bxru9khS.js → ReleasesTool-CsHniZCP.js} +20 -20
  36. package/lib/{ReleasesTool-Bxru9khS.js.map → ReleasesTool-CsHniZCP.js.map} +1 -1
  37. package/lib/{SchedulePublishingStudioLayout-CjJ-nu3Q.js → SchedulePublishingStudioLayout-BzSSDp9x.js} +3 -3
  38. package/lib/{SchedulePublishingStudioLayout-CjJ-nu3Q.js.map → SchedulePublishingStudioLayout-BzSSDp9x.js.map} +1 -1
  39. package/lib/{SchedulePublishingUpsellProvider-CxpMXwyA.js → SchedulePublishingUpsellProvider-DQqIZsCc.js} +2 -2
  40. package/lib/{SchedulePublishingUpsellProvider-CxpMXwyA.js.map → SchedulePublishingUpsellProvider-DQqIZsCc.js.map} +1 -1
  41. package/lib/{ScheduledPublishingEnabledProvider-Bvx140h2.js → ScheduledPublishingEnabledProvider-BcWaBJw5.js} +3 -3
  42. package/lib/{ScheduledPublishingEnabledProvider-Bvx140h2.js.map → ScheduledPublishingEnabledProvider-BcWaBJw5.js.map} +1 -1
  43. package/lib/{SearchProvider-DSLbCdgY.js → SearchProvider-D3w4Bvul.js} +10 -10
  44. package/lib/{SearchProvider-DSLbCdgY.js.map → SearchProvider-D3w4Bvul.js.map} +1 -1
  45. package/lib/{SingleDocReleaseLayout-DQicfsKs.js → SingleDocReleaseLayout-CQCkL8-0.js} +2 -2
  46. package/lib/{SingleDocReleaseLayout-DQicfsKs.js.map → SingleDocReleaseLayout-CQCkL8-0.js.map} +1 -1
  47. package/lib/{SingleDocReleaseUpsellProvider-DXNTZGTk.js → SingleDocReleaseUpsellProvider-YDBCGrHT.js} +4 -4
  48. package/lib/{SingleDocReleaseUpsellProvider-DXNTZGTk.js.map → SingleDocReleaseUpsellProvider-YDBCGrHT.js.map} +1 -1
  49. package/lib/{TasksStudioActiveToolLayout-CNpB5xLh.js → TasksStudioActiveToolLayout-DAmh3t6t.js} +16 -16
  50. package/lib/{TasksStudioActiveToolLayout-CNpB5xLh.js.map → TasksStudioActiveToolLayout-DAmh3t6t.js.map} +1 -1
  51. package/lib/{TasksStudioLayout-CnsvBNfw.js → TasksStudioLayout-6qNY69FD.js} +5 -5
  52. package/lib/{TasksStudioLayout-CnsvBNfw.js.map → TasksStudioLayout-6qNY69FD.js.map} +1 -1
  53. package/lib/{TimeZoneButton-DMd-M_ri.js → TimeZoneButton-TmrFye13.js} +4 -4
  54. package/lib/{TimeZoneButton-DMd-M_ri.js.map → TimeZoneButton-TmrFye13.js.map} +1 -1
  55. package/lib/{Tool-VgnYCwyZ.js → Tool-tpq9K4o7.js} +14 -14
  56. package/lib/{Tool-VgnYCwyZ.js.map → Tool-tpq9K4o7.js.map} +1 -1
  57. package/lib/{UnpublishVersionDialog-Fow5nBrc.js → UnpublishVersionDialog-6zyP9rCr.js} +5 -5
  58. package/lib/{UnpublishVersionDialog-Fow5nBrc.js.map → UnpublishVersionDialog-6zyP9rCr.js.map} +1 -1
  59. package/lib/{UpsellDialog-BqP2wmnt.js → UpsellDialog-CM238V3B.js} +3 -3
  60. package/lib/{UpsellDialog-BqP2wmnt.js.map → UpsellDialog-CM238V3B.js.map} +1 -1
  61. package/lib/{VariantsStudioNavbar-CvwRIsWJ.js → VariantsStudioNavbar-lFO2yrMq.js} +7 -7
  62. package/lib/{VariantsStudioNavbar-CvwRIsWJ.js.map → VariantsStudioNavbar-lFO2yrMq.js.map} +1 -1
  63. package/lib/{VariantsTool-CmQqDiwU.js → VariantsTool-B0OS4fku.js} +9 -9
  64. package/lib/{VariantsTool-CmQqDiwU.js.map → VariantsTool-B0OS4fku.js.map} +1 -1
  65. package/lib/{WorkspaceLoader-Ailj0PR9.js → WorkspaceLoader-CiJ6lGBu.js} +32 -32
  66. package/lib/{WorkspaceLoader-Ailj0PR9.js.map → WorkspaceLoader-CiJ6lGBu.js.map} +1 -1
  67. package/lib/_createContext.js +1 -1
  68. package/lib/{buildTextSelectionFromFragment-QpFfw3b7.js → buildTextSelectionFromFragment-CFZdgjpp.js} +3 -3
  69. package/lib/{buildTextSelectionFromFragment-QpFfw3b7.js.map → buildTextSelectionFromFragment-CFZdgjpp.js.map} +1 -1
  70. package/lib/{datastores-D4iZNSXV.js → datastores-wbjstxMt.js} +2 -2
  71. package/lib/{datastores-D4iZNSXV.js.map → datastores-wbjstxMt.js.map} +1 -1
  72. package/lib/{getTransactionsLogs-C-_o7nGx.js → getTransactionsLogs-Di50JBPB.js} +2 -2
  73. package/lib/{getTransactionsLogs-C-_o7nGx.js.map → getTransactionsLogs-Di50JBPB.js.map} +1 -1
  74. package/lib/index.js +35 -35
  75. package/lib/{inputResolver-Dpo4FxTy.js → inputResolver-DuUEGuH5.js} +4 -4
  76. package/lib/{inputResolver-Dpo4FxTy.js.map → inputResolver-DuUEGuH5.js.map} +1 -1
  77. package/lib/{navigation.telemetry-syjEPEw-.js → navigation.telemetry-EsdzXa34.js} +9 -9
  78. package/lib/{navigation.telemetry-syjEPEw-.js.map → navigation.telemetry-EsdzXa34.js.map} +1 -1
  79. package/lib/{plugin-B8Op6DFi.js → plugin-C_6lw0l3.js} +3 -3
  80. package/lib/{plugin-B8Op6DFi.js.map → plugin-C_6lw0l3.js.map} +1 -1
  81. package/lib/{plugin-CmF53OT5.js → plugin-ClT8-pVM.js} +4 -4
  82. package/lib/{plugin-CmF53OT5.js.map → plugin-ClT8-pVM.js.map} +1 -1
  83. package/lib/{plugin-Bk41RRuC.js → plugin-DRuKGgrO.js} +6 -6
  84. package/lib/{plugin-Bk41RRuC.js.map → plugin-DRuKGgrO.js.map} +1 -1
  85. package/lib/{plugin-BhEK2rZ8.js → plugin-wJP1ECFq.js} +6 -6
  86. package/lib/{plugin-BhEK2rZ8.js.map → plugin-wJP1ECFq.js.map} +1 -1
  87. package/lib/{scheduleItem-sJhB8YzX.js → scheduleItem-9PFIH7_h.js} +15 -15
  88. package/lib/{scheduleItem-sJhB8YzX.js.map → scheduleItem-9PFIH7_h.js.map} +1 -1
  89. package/lib/{schedules-CLC2KygL.js → schedules-DniNrpFJ.js} +3 -3
  90. package/lib/{schedules-CLC2KygL.js.map → schedules-DniNrpFJ.js.map} +1 -1
  91. package/lib/{searchDocumentRelease-CtPYZAZk.js → searchDocumentRelease-TrunKdQg.js} +5 -5
  92. package/lib/{searchDocumentRelease-CtPYZAZk.js.map → searchDocumentRelease-TrunKdQg.js.map} +1 -1
  93. package/lib/{studioClient-WYiCwgfZ.js → studioClient-BpYJ_yYC.js} +2 -2
  94. package/lib/{studioClient-WYiCwgfZ.js.map → studioClient-BpYJ_yYC.js.map} +1 -1
  95. package/lib/{useBundleDocuments-CiRQnzQh.js → useBundleDocuments-C58ExRpX.js} +5 -5
  96. package/lib/{useBundleDocuments-CiRQnzQh.js.map → useBundleDocuments-C58ExRpX.js.map} +1 -1
  97. package/lib/{useComments-CxUK5MNb.js → useComments-BcMCyjIE.js} +2 -2
  98. package/lib/{useComments-CxUK5MNb.js.map → useComments-BcMCyjIE.js.map} +1 -1
  99. package/lib/{useCommentsTelemetry-BWqcsQ1u.js → useCommentsTelemetry-CL97yuwT.js} +4 -4
  100. package/lib/{useCommentsTelemetry-BWqcsQ1u.js.map → useCommentsTelemetry-CL97yuwT.js.map} +1 -1
  101. package/lib/{useDocumentPreviewValues-B4jUnACZ.js → useDocumentPreviewValues-Cy9aUMu2.js} +5 -5
  102. package/lib/{useDocumentPreviewValues-B4jUnACZ.js.map → useDocumentPreviewValues-Cy9aUMu2.js.map} +1 -1
  103. package/lib/{useFeatureEnabled-sRpDeLLJ.js → useFeatureEnabled-C5qTffLc.js} +2 -2
  104. package/lib/{useFeatureEnabled-sRpDeLLJ.js.map → useFeatureEnabled-C5qTffLc.js.map} +1 -1
  105. package/lib/{useFieldActions-CrPgIiyl.js → useFieldActions-MFJIkobn.js} +2 -2
  106. package/lib/{useFieldActions-CrPgIiyl.js.map → useFieldActions-MFJIkobn.js.map} +1 -1
  107. package/lib/{useProjectId-bGwoCAuz.js → useProjectId-BRSQ8kIo.js} +2 -2
  108. package/lib/{useProjectId-bGwoCAuz.js.map → useProjectId-BRSQ8kIo.js.map} +1 -1
  109. package/lib/{useReleasesToolAvailable-BevhFmt9.js → useReleasesToolAvailable-BOlw1HWL.js} +3 -3
  110. package/lib/{useReleasesToolAvailable-BevhFmt9.js.map → useReleasesToolAvailable-BOlw1HWL.js.map} +1 -1
  111. package/lib/{useScheduledDraftMenuActions-DqsFlU0p.js → useScheduledDraftMenuActions-DIQYFw0x.js} +6 -6
  112. package/lib/{useScheduledDraftMenuActions-DqsFlU0p.js.map → useScheduledDraftMenuActions-DIQYFw0x.js.map} +1 -1
  113. package/lib/{useStudioUrl-DbfIwS1P.js → useStudioUrl-Dc5LnOvR.js} +5 -5
  114. package/lib/{useStudioUrl-DbfIwS1P.js.map → useStudioUrl-Dc5LnOvR.js.map} +1 -1
  115. package/lib/{useTimeZone-DnxQlCGS.js → useTimeZone-Da8WK1q-.js} +2 -2
  116. package/lib/{useTimeZone-DnxQlCGS.js.map → useTimeZone-Da8WK1q-.js.map} +1 -1
  117. package/lib/{validationUtils-Bcu-PkHm.js → validationUtils-B9CLn9F7.js} +4 -4
  118. package/lib/{validationUtils-Bcu-PkHm.js.map → validationUtils-B9CLn9F7.js.map} +1 -1
  119. package/lib/{version-DTqx_kFw.js → version-D7qSwBVE.js} +2 -2
  120. package/lib/{version-DTqx_kFw.js.map → version-D7qSwBVE.js.map} +1 -1
  121. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"SearchProvider-DSLbCdgY.js","names":["useMemo","useObservable","map","startWith","useProjectStore","INITIAL_STATE","value","loading","useProjectOrganizationId","$","_c","projectStore","t0","getOrganizationId","pipe","_temp","obs$","res","useSyncObservable","useRenderingContextStore","useRenderingContext","renderingContextStore","renderingContext","Card","CardProps","ElementType","HTMLProps","useContext","useMemo","RefAttributes","PreviewCardContext","css","styled","StyledCard","PreviewCardContextValue","selected","usePreviewCard","context","Error","PreviewCard","props","$","_c","as","children","ref","restProps","t0","value","t1","t2","ReferenceInputPreviewCard","HTMLProps","ReactNode","useMemo","RefAttributes","styled","Button","ButtonProps","StatusButtonProps","HTMLButtonElement","reason","StyledButton","Dot","div","width","height","borderRadius","boxShadow","StatusButton","props","$","_c","disabledProp","label","ref","restProps","t0","tone","disabled","mode","undefined","t1","t2","backgroundColor","dotStyle","Boolean","t3","t4","hasSanityPackageInImportMap","Boolean","getSanityImportMapUrl","document","undefined","importMapEntries","querySelectorAll","found","Array","from","some","entry","textContent","importMap","JSON","parse","imports","sanity","getSanityImportMapUrl","checkIsStaging","__SANITY_STAGING__","globalThis","importMapUrl","includes","isStaging","IntrinsicTypeName","ComponentType","SearchOperatorType","Operator","OperatorDivider","OperatorItem","TOperators","type","name","SearchFilterBaseDefinition","description","icon","operators","SearchFilterFieldDefinition","fieldType","SearchFilterPinnedDefinition","fieldPath","group","title","SearchFilterDefinition","createFilterDefinitionDictionary","filterDefinitions","SearchFilterDefinitionDictionary","reduce","acc","val","defineSearchFilter","filterDef","defineSearchFilterOperators","getFilterDefinition","definitions","filterName","getSupportedFieldTypes","filterDefs","push","Record","useContext","SearchContext","SearchContextValue","useSearchState","context","undefined","Error","isObjectSchemaType","ObjectField","SchemaType","getSchemaField","schemaType","fieldPath","paths","split","firstPath","field","fields","find","f","name","nextPath","slice","join","type","undefined","WarningOutlineIcon","PreviewValue","SanityDocument","getMissingDocumentFallback","document","Partial","title","String","subtitle","_id","media","Sources","snapshot","original","fallback","EMPTY","key","getPreviewValueWithFallback","SchemaType","Badge","Box","Flex","useMemo","useObservable","styled","DocumentStatus","DocumentStatusIndicator","GeneralPreviewLayoutKey","PerspectiveStack","DocumentPreviewPresence","SanityDefaultPreview","getPreviewStateObservable","getPreviewValueWithFallback","useDocumentVersions","getDocumentVersionInfoFromVersions","useDocumentPreviewStore","DocumentPresence","SearchResultItemPreviewProps","documentId","documentType","layout","presence","perspective","variant","schemaType","showBadge","INITIAL_PREVIEW_STATE","snapshot","isLoading","original","SearchResultItemPreviewBox","SearchResultItemPreview","t0","$","_c","t1","undefined","documentPreviewStore","t2","observable","t3","_id","_type","documentStub","t4","versions","t5","versionsInfo","t6","bb0","t7","length","t8","title","t9","draft","published","t10","status","tooltip","fallback","t11","icon","StackablePerspective","SanityDocumentLike","Box","ResponsiveMarginProps","ResponsivePaddingProps","MouseEvent","useCallback","useMemo","useSyncObservable","of","useIntentLink","Tooltip","PreviewCard","GeneralPreviewLayoutKey","useSchema","useTranslation","useValuePreview","useGrantsStore","useDocumentPresence","getPublishedId","useSearchState","SearchResultItemPreview","ItemSelectHandler","item","Pick","SearchResultItemProps","disableIntentLink","documentId","documentType","layout","onClick","e","HTMLElement","onItemSelect","previewPerspective","previewVariant","SearchResultItem","t0","$","_c","rest","schema","t1","get","type","documentPresence","name","t2","t3","t4","id","params","t5","intent","onIntentClick","href","state","t","grantsStore","t6","canDisableAction","checkDocumentPermission","_id","_type","createPermission$","createPermission","hasCreatePermission","granted","t7","disabledDocumentIds","some","includes","existsInRelease","disabledAction","t8","documentStub","t9","enabled","schemaType","value","perspectiveStack","variant","preview","t10","title","handleClick","t11","undefined","t12","t13","t14","t15","pointerEvents","opacity","t16","t17","t18","content","t19","tooltipContent","t20","studioTheme","IS_MAC","window","test","navigator","platform","DEBUG_FRAGMENT","DEBUG_MODE","SEARCH_LIMIT","GLOBAL_SEARCH_KEY","GLOBAL_SEARCH_KEY_MODIFIER","POPOVER_INPUT_PADDING","space","POPOVER_MAX_HEIGHT","POPOVER_MAX_WIDTH","POPOVER_VERTICAL_MARGIN","POPOVER_RADIUS","isReferenceSchemaType","CrossDatasetType","ObjectSchemaType","SchemaType","ReferenceSearchSpec","targetType","leafPath","weight","mapWith","PREVIEW_FIELD_WEIGHT_MAP","Record","title","subtitle","description","DEFAULT_PREVIEW_SELECT_WEIGHT","CACHE","WeakMap","Map","getTypeChain","type","isStringField","jsonType","isPtField","of","some","arrayMemberType","name","isSlugField","isSchemaType","input","findFieldType","fieldName","chainType","fields","length","field","find","undefined","ResolvedLeaf","resolveLeaf","segments","depth","maxDepth","head","rest","fieldType","resolved","ReferenceBoundary","targetTypes","leafSegments","walkToReference","to","deriveReferenceSearchSpecs","schemaType","cachedByDepth","get","cached","select","preview","byTargetAndLeaf","selectionKey","rawPath","Object","entries","replace","includes","boundary","split","leaf","dedupeKey","existing","set","specs","Array","from","values","WILDCARD_TOKEN","NEGATION_TOKEN","TOKEN_REGEX","isNegationToken","token","trim","at","isPrefixToken","isExactMatchToken","every","character","prefixLast","query","tokens","match","map","finalIncrementalTokenIndex","findLastIndex","finalIncrementalToken","length","join","prefixedTokens","splice","ReferenceSearchSpec","prefixLast","REFERENCE_RESOLVE_LIMIT","ReferenceResolveQuery","query","params","__query","createReferenceResolveQuery","specs","rawQuery","length","undefined","clauses","Array","from","Set","map","spec","matchTarget","mapWith","leafPath","targetType","join","isIndexSegment","isIndexTuple","isKeySegment","isReferenceSchemaType","CrossDatasetType","PathSegment","SchemaType","fromString","pathFromString","fieldNeedsEscape","IMPLICIT_SCHEMA_TYPE_FIELDS","CompileFieldPathOptions","strict","orderingName","silent","warnedMessages","Set","resetCompileFieldPathWarningCache","clear","reportError","message","Error","has","add","console","warn","formatOrderingLabel","compileFieldPath","schemaType","fieldPath","options","segments","length","compiled","compileSegments","path","Required","Pick","head","rest","undefined","typeLabel","name","type","schemaField","fields","find","field","includes","joinTail","validFields","map","join","nextSegment","hasArrayAccessor","compileFieldContinuation","jsonType","members","Array","isArray","of","accessor","_key","tail","slice","memberType","emittedSoFar","fieldType","probeOptions","const","refType","to","inner","out","seg","compileFieldPath","CompileFieldPathOptions","SearchSort","CompiledSortEntry","expression","projectionIndex","compileSortExpression","searchSort","index","options","field","schemaType","CrossDatasetType","SchemaType","SearchConfiguration","SlugSchemaType","toString","pathToString","isRecord","SearchPath","SearchSpec","SearchWeightEntry","path","weight","type","CACHE","WeakMap","PREVIEW_FIELD_WEIGHT_MAP","title","subtitle","description","BASE_WEIGHTS","Record","Omit","_id","_type","ignoredBuiltInObjectTypes","getTypeChain","isPtField","jsonType","of","some","arrType","name","isStringField","schemaType","isSlugField","typeChain","isSearchConfiguration","options","search","isSchemaType","input","getFullyQualifiedPath","join","getLeafWeights","maxDepth","getWeight","traverse","depth","accumulator","push","recursiveResult","t","fields","length","includes","field","filter","Boolean","arrayItemType","reduce","acc","getUserSetWeight","searchOptions","map","find","getHiddenWeight","hidden","getDefaultWeights","result","getPreviewWeights","isCrossDataset","select","preview","selectionKeysBySelectionPath","Object","fromEntries","entries","selectionKey","selectionPath","replace","defaultWeights","nestedWeightsBySelectionPath","previewFieldName","nested","DeriveSearchWeightsFromTypeOptions","processPaths","paths","deriveSearchWeightsFromType2024","cached","get","userSetWeights","hiddenWeights","previewWeights","weights","typeName","set","ClientPerspective","SanityClient","CrossDatasetType","SanityDocumentLike","SchemaType","SearchStrategy","Observable","ORDERINGS_PROJECTION_KEY","SearchTerms","filter","params","Record","query","types","Type","SearchPath","weight","path","mapWith","SearchSpec","typeName","paths","SearchStory","score","why","SearchHit","hit","WeightedHit","resultIndex","stories","SearchFactoryOptions","maxDepth","tag","unique","strategy","perspective","variant","WeightedSearchResults","type","hits","nextCursor","Groq2024SearchResults","SearchStrategyFactory","client","commonOpts","searchTerms","searchOpts","SearchOptions","TResult","comments","skipSortByScore","sort","SearchSort","cursor","limit","isCrossDataset","queryType","SortDirection","direction","field","schemaType","projectionIndex","nulls","ORDERINGS_PROJECTION_KEY","SearchSort","getSortTarget","ordering","projectionIndex","undefined","field","getNullSortingPrefix","direction","nulls","dirLower","toLowerCase","needsOverride","target","wrapFieldWithFn","mapWith","toOrderClause","orderBy","flatMap","nullPrefix","fieldClause","map","str","trim","filter","Boolean","join","DEFAULT_MAX_FIELD_DEPTH","CrossDatasetType","GlobalDocumentReferenceType","SchemaType","groupBy","compileSortExpression","CompiledSortEntry","deriveSearchWeightsFromType2024","prefixLast","toOrderClause","ORDERINGS_PROJECTION_KEY","SearchFactoryOptions","SearchOptions","SearchSort","SearchTerms","SearchParams","Record","__types","__limit","__query","FINDABILITY_MVI","DEFAULT_LIMIT","SearchQuery","query","params","options","sortOrder","compiledSortEntries","isSchemaType","maybeSchemaType","ReferenceSearchOptions","referenceIds","referenceWeight","createSearchQuery","searchTerms","searchParams","perspective","variant","sort","isCrossDataset","tag","maxDepth","cursor","limit","comments","filter","hasReferenceIds","Array","isArray","length","specs","types","map","schemaType","processPaths","paths","weight","flattenedSpecs","flatMap","typeName","path","groupedSpecs","entry","join","baseMatch","referenceBoost","score","Object","entries","some","JSON","stringify","concat","inputSortOrder","field","direction","isScored","index","projectionIndex","unscoredMatch","filters","flat","orderingsExpressions","expression","orderingsProjection","projection","rawQuery","finalParams","type","name","__rawQuery","__refIds","pragma","s","SanityDocumentLike","CompiledSortEntry","ORDERINGS_PROJECTION_KEY","SearchSort","SortDirection","getNextCursor","lastResult","sortOrder","compiledSortEntries","undefined","hasIdSort","some","field","fullSortOrder","concat","direction","reduce","cursor","sortEntry","index","nextPredicate","slice","map","previousSortEntry","previousIndex","getCursorPredicate","filter","predicate","join","segment","sortComparators","Record","asc","desc","sort","lastEntry","comparator","compiled","value","readOrderingsValue","projectionIndex","expression","JSON","stringify","orderings","Array","isArray","getPublishedId","DEFAULT_MAX_FIELD_DEPTH","CrossDatasetType","SanityDocumentLike","SchemaType","catchError","map","mergeMap","Observable","of","deriveReferenceSearchSpecs","Groq2024SearchResults","SearchStrategyFactory","SearchTerms","createReferenceResolveQuery","createSearchQuery","getNextCursor","getSearchTerms","searchParams","types","query","length","createGroq2024Search","typesFromFactory","client","factoryOptions","search","searchOptions","searchTerms","mergedOptions","rawQuery","referenceSpecs","flatMap","schemaType","maxDepth","maxReferenceWeight","reduce","highest","spec","Math","max","weight","runMainSearch","referenceIds","params","options","sortOrder","compiledSortEntries","referenceWeight","observable","fetch","pipe","hits","hasNextPage","limit","lastResult","at","type","const","hit","slice","__limit","nextCursor","undefined","resolveQuery","tag","perspective","variant","resolvedIds","publishedIds","Array","from","Set","filter","resolvedId","SanityDocumentLike","compact","intersection","keyBy","partition","toLower","union","uniq","words","SearchSpec","WeightedHit","SearchScore","calculateScore","searchTerms","value","phrases","uniqueSearchPhrases","uniqueSearchWords","partitionAndSanitizeSearchTerms","phraseScore","phraseWhy","calculatePhraseScore","wordScore","wordWhy","calculateWordScore","join","stringify","JSON","applyWeights","searchSpec","hits","terms","specByType","spec","typeName","map","hit","index","typeSpec","_type","stories","paths","pathSpec","idx","path","score","why","weight","totalScore","reduce","acc","rank","resultIndex","length","sanitizedValue","toLowerCase","trim","fieldScore","matchCount","forEach","term","includes","uniqueSearchTerms","uniqueValueTerms","matches","all","searchPhrases","searchWords","test","stripWrappingQuotes","str","replace","CrossDatasetType","SchemaType","SearchConfiguration","SlugSchemaType","toString","pathToString","isRecord","SearchPath","SearchSpec","SearchWeightEntry","path","weight","type","CACHE","WeakMap","PREVIEW_FIELD_WEIGHT_MAP","title","subtitle","description","BASE_WEIGHTS","Record","Omit","_id","_type","ignoredBuiltInObjectTypes","getTypeChain","isPtField","jsonType","of","some","arrType","name","isStringField","schemaType","isSlugField","typeChain","isSearchConfiguration","options","search","isSchemaType","input","getFullyQualifiedPath","join","getLeafWeights","maxDepth","getWeight","traverse","depth","accumulator","push","recursiveResult","t","fields","length","includes","field","filter","Boolean","arrayItemType","reduce","acc","getUserSetWeight","searchOptions","map","find","getHiddenWeight","hidden","getDefaultWeights","result","getPreviewWeights","isCrossDataset","select","preview","selectionKeysBySelectionPath","Object","fromEntries","entries","selectionKey","selectionPath","replace","defaultWeights","nestedWeightsBySelectionPath","previewFieldName","nested","DeriveSearchWeightsFromTypeOptions","processPaths","paths","deriveSearchWeightsFromType","cached","get","userSetWeights","hiddenWeights","previewWeights","weights","typeName","mapWith","set","DEFAULT_MAX_FIELD_DEPTH","CrossDatasetType","SchemaType","compact","flatten","flow","toLower","trim","union","uniq","words","compileSortExpression","deriveSearchWeightsFromType","toOrderClause","ORDERINGS_PROJECTION_KEY","SearchFactoryOptions","SearchOptions","SearchPath","SearchSort","SearchSpec","SearchTerms","FINDABILITY_MVI","SearchParams","__types","__limit","key","SearchQuery","query","params","options","Record","searchSpec","terms","DEFAULT_LIMIT","combinePaths","paths","pathWithMapper","mapWith","path","createConstraints","specs","combinedSearchPaths","map","configForType","opt","constraints","_term","i","joinedPath","filter","constraint","length","join","SPECIAL_CHARS","STRIP_EDGE_CHARS","tokenize","string","match","token","replace","extractTermsFromQuery","quotedQueries","unquotedQuery","push","quotedTerms","str","remainingTerms","createSearchQuery","searchTerms","searchOpts","tag","maxDepth","isCrossDataset","perspective","variant","sort","limit","comments","types","schemaType","filters","Boolean","selections","skipSortByScore","spec","typeName","undefined","selection","cfg","inputSortOrder","field","direction","compiledSortEntries","entry","index","resolvedSortOrder","projectionIndex","orderingsExpressions","expression","orderingsProjection","baseProjectionFields","projection","groqComments","concat","s","updatedQuery","toGroqParams","reduce","acc","term","CrossDatasetType","SanityDocumentLike","SchemaType","sortBy","map","tap","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","versionedClient","removeDupes","variantApiVersion","SearchStrategyFactory","SearchTerms","WeightedSearchResults","applyWeights","createSearchQuery","getSearchTerms","searchParams","types","query","length","createWeightedSearch","client","factoryOptions","search","searchOptions","searchTerms","params","options","searchSpec","terms","apiVersion","variant","perspective","undefined","observable","fetch","pipe","unique","hits","skipSortByScore","hit","score","type","SearchStrategy","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","versionedClient","variantApiVersion","Groq2024SearchResults","SearchStrategyFactory","WeightedSearchResults","createGroq2024Search","createWeightedSearch","searchStrategies","groqLegacy","groq2024","Record","DEFAULT_SEARCH_STRATEGY","createSearch","searchableTypes","client","options","factory","strategy","apiVersion","variant","perspective","undefined","SearchTerms","hasSearchableTerms","allowEmptyQueries","terms","hasQuery","query","length","hasFilter","filter","hasSelectedTypes","types","ObjectSchemaType","Schema","SchemaType","isNonNullable","isDocumentType","type","Boolean","name","isObjectType","jsonType","isIgnoredType","startsWith","getSearchableTypes","schema","explicitlyAllowedTypes","getTypeNames","map","typeName","get","filter","includes","ObjectSchemaType","Schema","SchemaType","getSearchableTypes","getSelectableOmnisearchTypes","schema","typeFilter","getSearchableOmnisearchTypes","filter","type","inTypeFilter","sort","sortTypes","__experimental_omnisearch_visibility","a","b","title","name","localeCompare","toLowerCase","includes","SanityClient","DEFAULT_MAX_FIELD_DEPTH","isFinite","useMemo","useObservable","Observable","of","catchError","map","shareReplay","startWith","useClient","DEFAULT_STUDIO_CLIENT_OPTIONS","useWorkspace","DEFAULT_API_FIELD_DEPTH","PartialIndexSettings","partialIndexSettings","maxFieldDepth","Settings","isLoading","settings","INITIAL_LOADING_STATE","fetchMaxDepth","client","projectId","dataset","config","observable","request","uri","tag","cachedSettings","Map","useSearchMaxFieldDepth","overrideClient","$","_c","isEnabled","search","unstable_partialIndexing","enabled","workspaceClient","t0","set","has","pipe","t1","get","_temp","_temp2","indexSettingsObservable","indexSettings","Math","min","err","console","error","Schema","isEqual","useCallback","useMemo","useState","useObservableEvent","concat","EMPTY","iif","Observable","of","timer","catchError","debounce","distinctUntilChanged","filter","map","scan","switchMap","tap","useClient","SearchHit","SearchOptions","SearchTerms","createSearch","DEFAULT_STUDIO_CLIENT_OPTIONS","useWorkspace","SearchState","hasSearchableTerms","getSearchableOmnisearchTypes","useSearchMaxFieldDepth","SearchRequest","debounceTime","options","terms","DEFAULT_DEBOUNCE_TIME","INITIAL_SEARCH_STATE","error","hits","loading","query","types","nonNullable","v","T","NonNullable","sanitizeRequest","request","trim","useSearch","t0","$","_c","allowEmptyQueries","initialState","onComplete","onError","onStart","schema","searchState","setSearchState","client","maxFieldDepth","strategy","search","t1","tag","unique","maxDepth","t2","inputValue$","pipe","_temp","request_0","t3","nextCursor","undefined","_temp2","handleQueryChange","searchRequest","handleSearch","t4","prevState","nextState","SchemaType","TFunction","DEFAULT_AVAILABLE_CHARS","getDocumentTypesTruncated","availableCharacters","types","remainingCount","length","visibleTypes","reduce","remaining","acc","val","index","title","typeTitle","push","map","documentTypesTruncated","t","key","count","formatParams","style","type","schemaType","name","Box","css","styled","CustomTextInputBox","$background","$smallClearButton","theme","sanity","color","card","disabled","bg2","TextInput","ComponentProps","RefAttributes","CustomTextInputBox","CustomTextInputProps","$background","$smallClearButton","CustomTextInput","props","$","_c","ref","rest","t0","t1","ToggleArrowRightIcon","Box","Flex","Text","ReactNode","useCallback","useEffect","useState","styled","DetailsProps","children","margin","marginX","marginY","marginTop","marginRight","marginBottom","marginLeft","open","icon","title","HeaderButton","button","ToggleArrow","props","Header","IconBox","Details","$","_c","openProp","restProps","t0","undefined","setOpen","t1","Symbol","for","_temp","handleToggle","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","v","CompatibleStudioAppId","AppIdCache","get","args","projectId","appIdFetcher","AppIdFetcher","Promise","createAppIdCache","appIdCache","key","cacheElement","error","console","undefined","ReactNode","useContext","useMemo","AppIdCacheContext","AppIdCache","createAppIdCache","AppIdCacheProviderProps","children","AppIdCacheProvider","props","$","_c","parentCache","t0","cache","t1","useAppIdCache","Error","checkStudioManifestExists","studioHostUrl","Promise","url","response","fetch","method","status","console","error","e","SanityClient","isStaging","checkStudioManifestExists","StudioAppResponse","id","title","type","urlType","appHost","StudioApp","studioUrl","CompatibleStudioAppId","appId","studioApps","internalUrlSuffix","fetchStudiosWithUrl","client","projectId","internalSuffix","apps","request","method","url","map","app","getStudioUrl","fetchCreateCompatibleAppId","args","fallbackOrigin","checkStudioManifest","studioHost","Promise","origin","window","location","appsWithStudioUrl","appMatchingOrigin","find","startsWith","manifest","appMatchingFallback","useEffect","useMemo","useState","useClient","useSource","AppIdCache","AppIdFetcher","useAppIdCache","CompatibleStudioAppId","fetchCreateCompatibleAppId","ResolvedStudioApp","loading","studioApp","useStudioAppIdStore","config","$","_c","t0","Symbol","for","apiVersion","client","cache","projectId","t1","fallbackStudioOrigin","pId","fallbackOrigin","appIdFetcher","t2","enabled","useStudioAppIdStoreInner","props","setLoading","setStudioApp","mounted","getAppId","entry","get","undefined","catch","console","error","SearchOperatorBase","SearchOperatorButtonValue","SearchOperatorInput","SearchOperatorParams","SearchOperatorDefinition","buttonValueComponent","TValue","groqFilter","params","initialValue","inputComponent","type","createOperatorDefinitionDictionary","operatorDefinitions","SearchOperatorDefinitionDictionary","reduce","acc","val","getOperatorDefinition","operators","operatorType","undefined","getOperatorInitialValue","Record","SchemaType","intersection","isEmpty","isNonNullable","SearchFieldDefinition","SearchFieldDefinitionDictionary","getFilterDefinition","OperatorItem","SearchFilterDefinition","SearchFilterDefinitionDictionary","getOperatorDefinition","SearchOperatorDefinitionDictionary","SearchFilter","buildSearchFilter","filterDefinition","fieldId","filterName","name","operatorType","operators","find","operator","type","generateFilterQuery","fieldDefinitions","filterDefinitions","filters","operatorDefinitions","filter","validateFilter","map","groqFilter","fieldPath","resolveFieldPath","value","join","getFieldFromFilter","fields","undefined","getFilterKey","narrowDocumentTypes","types","selectedDocumentTypes","filteredDocumentTypes","Object","values","field","includes","id","documentTypes","length","intersectingDocumentTypes","push","sort","fieldDefinition","filterDef","operatorDef","fieldDef","hasFilterValue","Card","Flex","useGlobalKeyDown","useLayer","isHotkey","ReactNode","useCallback","useEffect","useState","FocusLock","styled","POPOVER_INPUT_PADDING","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","FilterPopoverWrapperProps","anchorElement","HTMLElement","children","onClose","isEscape","MAX_HEIGHT","HiddenOverlay","div","FilterPopoverWrapper","t0","$","_c","isTopLayer","t1","event","handleGlobalKeyDown","popoverOffset","usePopoverOffset","t2","t3","t4","maxHeight","zIndex","t5","t6","t7","calcPopoverOffset","element","rect","getBoundingClientRect","offset","y","height","setOffset","handleWindowResize","window","addEventListener","removeEventListener","SearchIcon","Box","Flex","ChangeEvent","RefAttributes","styled","useTranslation","useSearchState","CustomTextInput","FilterPopoverContentHeaderProps","ariaInputLabel","onChange","e","HTMLInputElement","onClear","typeFilter","SearchHeaderBox","theme","sanity","color","base","border","SearchHeaderContentFlex","FilterPopoverContentHeader","t0","$","_c","ref","state","t1","fullscreen","t","t2","t3","t4","t5","Schema","SchemaType","ButtonTone","difference","startCase","TFunction","isNonNullable","SearchFieldDefinition","SearchFieldDefinitionDictionary","getFilterDefinition","SearchFilterDefinition","SearchFilterDefinitionDictionary","SearchFilterPinnedDefinition","FilterMenuItem","FilterMenuItemFilter","FilterMenuItemHeader","SearchFilter","buildSearchFilter","getFieldFromFilter","createFilterMenuItems","documentTypesNarrowed","fieldDefinitions","filterDefinitions","schema","titleFilter","types","t","fieldFilters","Object","values","filter","fieldDef","includesTitleInFieldDefinition","map","filterDef","filterName","id","pinnedItems","buildPinnedMenuItems","length","filterGroup","filters","headerTitle","buildFieldMenuItemsNarrowed","tone","header","title","type","filterItems","fieldDefinition","filterDefinition","group","sharedFilters","sharesDocumentTypes","sharedItems","groupedItems","documentType","docType","get","name","sort","a","b","localeCompare","flatMap","groupFilters","includesDocumentTypes","ungroupedPinnedFilters","isPinnedFilterDefWithoutGroup","includesTitleInPinnedFilterDefinition","groupedPinnedFilters","isPinnedFilterDefWithGroup","reduce","Record","acc","val","push","entries","groupTitle","documentTypes","some","includes","field","currentTitle","fieldTitle","titlePath","join","toLowerCase","useMemo","useSearchState","getFilterDefinition","SearchFilter","getFieldFromFilter","FilterTitleProps","filter","maxLength","FilterTitle","t0","$","_c","state","t1","definitions","t2","bb0","t3","filters","filterName","filterDef","type","t4","fields","fieldDefinition","titlePath","length","title","slice","UnknownIcon","useSearchState","getFilterDefinition","SearchFilter","FilterIconProps","filter","FilterIcon","t0","$","_c","state","t1","definitions","t2","filters","filterName","icon","Icon","t3","Symbol","for","ChevronRightIcon","Box","Flex","Stack","Text","Fragment","useSearchState","SearchFilter","getFieldFromFilter","FilterTitle","FilterIcon","FilterDetailsProps","filter","FilterDetails","t0","$","_c","state","t1","definitions","T0","t2","t3","fields","fieldDefinition","titlePath","length","slice","map","pathTitle","index","opacity","paddingLeft","paddingRight","t4","Symbol","for","flexShrink","t5","t6","t7","t8","isValidElement","renderToString","sanitizeFieldValue","name","React","JSX","Element","stripHtmlTags","err","console","warn","str","DOMParser","parseFromString","body","textContent","Card","Flex","Stack","Text","startCase","uniq","Tooltip","TextWithTone","useSchema","useTranslation","EMPTY_ARRAY","isNonNullable","truncateString","useSearchState","SearchFieldDefinition","SearchFilterDefinition","getSchemaField","sanitizeFieldValue","FilterTooltipProps","children","React","JSX","Element","fieldDefinition","filterDefinition","visible","MAX_VISIBLE_TYPES","FilterTooltip","t0","$","_c","state","t1","documentTypesNarrowed","t","schema","T0","T1","T2","t2","t3","t4","t5","t6","t7","t8","t9","length","fieldDefinitionDocumentTypeTitles","documentTypes","map","d","defType","get","title","name","filter","sort","fieldDefinitionDescription","t10","fieldPath","t11","d_0","defType_0","field","type","description","descriptions","uniqueDescriptions","Symbol","for","maxWidth","fontFamily","slice","join","t12","t13","t14","Box","Button","ResponsiveMarginProps","ResponsivePaddingProps","memo","useCallback","useSearchState","FilterMenuItemFilter","getFilterKey","FilterDetails","FilterTooltip","FilterMenuItemProps","item","onClose","MenuItemFilter","t0","$","_c","rest","dispatch","state","t1","filters","t2","filter","type","handleClick","t3","t4","f","find","isAlreadyActive","tooltipEnabled","fieldDefinition","filterDefinition","description","undefined","t5","Symbol","for","position","whiteSpace","width","t6","tone","t7","t8","t9","t10","Box","Card","Text","memo","FilterMenuItemHeader","MenuItemHeaderFields","item","MenuItemHeader","t0","$","_c","t1","tone","t2","title","t3","Box","Flex","Text","ChangeEvent","useCallback","useMemo","useState","CommandList","CommandListGetItemDisabledCallback","CommandListRenderItemCallback","useSchema","useTranslation","useSearchState","FilterMenuItem","getFilterKey","FilterPopoverContentHeader","createFilterMenuItems","MenuItemFilter","MenuItemHeader","AddFilterPopoverContentProps","onClose","POPOVER_STYLES","width","AddFilterPopoverContent","t0","$","_c","inputElement","setInputElement","titleFilter","setTitleFilter","t","t1","Symbol","for","e","currentTarget","value","handleFilterChange","t2","handleFilterClear","schema","state","t3","documentTypesNarrowed","definitions","filters","terms","t4","types","t5","fields","fieldDefinitions","filterDefinitions","filteredMenuItems","t6","item","type","renderItem","t7","index","filterItem","find","f","filter","getItemDisabled","t8","index_0","menuItem","group","join","title","getItemKey","t9","t10","t11","length","count","t12","t13","t14","AddIcon","useClickOutsideEvent","useCallback","useRef","useState","Button","Popover","useTranslation","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","useSearchState","FilterPopoverWrapper","AddFilterPopoverContent","AddFilterButton","$","_c","open","setOpen","buttonElement","setButtonElement","popoverRef","t","state","t0","fullscreen","t1","Symbol","for","handleClose","t2","handleOpen","t3","current","t4","t5","t6","t7","t8","t9","t10","Card","Stack","Code","useSearchState","DebugDocumentTypesNarrowed","$","_c","state","t0","documentTypesNarrowed","t1","Symbol","for","t2","whiteSpace","t3","length","join","t4","Card","Stack","Code","useSearchState","DebugFilterQuery","$","_c","state","t0","terms","t1","filter","t2","Symbol","for","t3","whiteSpace","t4","CheckmarkIcon","SchemaType","Box","ResponsiveMarginProps","ResponsivePaddingProps","memo","useCallback","Button","useSearchState","DocumentTypeFilterItemProps","selected","type","DocumentTypeFilterItem","TypeFilterItem","t0","$","_c","rest","dispatch","t1","schemaType","handleTypeAdd","t2","handleTypeRemove","t3","handleClick","t4","title","name","t5","t6","t7","t8","t9","Schema","SchemaType","Box","Flex","Stack","Text","MenuDivider","partition","ChangeEvent","useCallback","useMemo","useRef","useState","styled","Button","CommandList","CommandListGetItemSelectedCallback","CommandListHandle","CommandListRenderItemCallback","useSchema","useTranslation","useSearchState","DocumentTypeMenuItem","getSelectableOmnisearchTypes","FilterPopoverContentHeader","DocumentTypeFilterItem","ClearButtonBox","theme","sanity","color","base","border","POPOVER_STYLES","width","DocumentTypesPopoverContent","$","_c","inputElement","setInputElement","typeFilter","setTypeFilter","commandListRef","t","schema","dispatch","state","t0","terms","t1","types","selectedTypes","selectedTypesSnapshot","setSelectedTypesSnapshot","documentTypeItems","useGetDocumentTypeItems","t2","Symbol","for","e","currentTarget","value","handleFilterChange","t3","handleFilterClear","t4","type","current","focusInputElement","scrollToIndex","handleTypesClear","t5","index","virtualItem","title","item","name","getItemKey","renderItem","_temp","t6","index_0","item_0","getItemDisabled","t7","index_1","item_1","selected","getItemSelected","t8","t9","t10","length","t11","filter","t12","t13","t14","ClearButton","onClick","items","itemsSelected","itemsUnselected","includes","hasSelectedItems","hasUnselectedItems","push","forEach","ChevronDownIcon","Placement","useClickOutsideEvent","useCallback","useMemo","useRef","useState","Button","Popover","useTranslation","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","useSearchState","documentTypesTruncated","FilterPopoverWrapper","DocumentTypesPopoverContent","FALLBACK_PLACEMENTS","DocumentTypesButton","$","_c","open","setOpen","buttonElement","setButtonElement","popoverRef","state","t0","fullscreen","terms","t1","types","t","t2","Symbol","for","handleClose","t3","handleOpen","t4","current","t5","title","t6","t7","t8","t9","t10","t11","Box","Flex","useMemo","styled","TextWithTone","useTranslation","Translate","TranslateComponentMap","TFunction","isRecord","useSearchState","getOperatorDefinition","SearchFilter","SearchFilterValues","FilterTitle","FilterLabelProps","filter","fontSize","showContent","CustomBox","$flexShrink","FilterLabel","t0","$","_c","t1","t2","undefined","t","state","t3","definitions","fullscreen","t4","operators","operatorType","operator","ButtonValue","buttonValueComponent","filterValue","value","t5","t6","t7","children","t8","children_0","Field","Operator","Value","components","descriptionKey","console","warn","t9","t10","getFilterValues","t11","values","count","isStringOrNumber","from","to","Card","Stack","Code","useSearchState","SearchFilter","getFieldFromFilter","DebugDocumentTypesProps","filter","DebugDocumentTypes","t0","$","_c","state","t1","definitions","t2","fields","T0","T1","T2","t10","t3","t4","t5","t6","t7","t8","t9","fieldDefinition","Symbol","for","whiteSpace","documentTypes","length","join","t11","t12","t13","Card","Stack","Code","useSearchState","SearchFilter","getFieldFromFilter","DebugFilterValuesProps","filter","DebugFilterValues","t0","$","_c","state","t1","definitions","t2","fields","fieldDefinition","t3","Symbol","for","t4","fieldPath","t5","whiteSpace","t6","filterName","t7","t8","operatorType","t9","t10","value","JSON","stringify","t11","t12","ErrorOutlineIcon","Box","Flex","ResponsivePaddingProps","Stack","TextWithTone","useTranslation","FilterError","props","$","_c","t","t0","Symbol","for","t1","t2","t3","t4","t5","t6","ChevronDownIcon","Inline","Menu","MenuDivider","useCallback","useId","Button","MenuButton","MenuItem","useTranslation","useSearchState","getFilterDefinition","getOperatorDefinition","SearchOperatorDefinition","SearchFilter","getFilterKey","OperatorsMenuButtonProps","filter","operator","CustomMenuItem","t0","$","_c","onClick","selected","t1","type","handleClick","t","t2","nameKey","t3","icon","t4","OperatorsMenuButton","menuButtonId","dispatch","state","T0","T1","T2","definitions","filters","operators","Symbol","for","bb0","operatorItems","filterName","t5","operatorType","filterKey","length","t6","t7","item","index","menuOperator","name","map","placement","constrainSize","portal","radius","t8","TrashIcon","Box","Card","Flex","Stack","Text","ErrorInfo","useCallback","useState","FocusLock","Button","ErrorBoundary","supportsTouch","useSearchState","getFilterDefinition","getOperatorDefinition","SearchFilter","getFieldFromFilter","getFilterKey","FilterDetails","FilterError","OperatorsMenuButton","FilterFormProps","filter","ErrorParams","error","Error","info","FilterForm","t0","$","_c","errorParams","setErrorParams","dispatch","state","t1","definitions","fullscreen","t2","filters","filterName","filterDefinition","t3","operators","operatorType","operator","t4","fields","fieldDefinition","t5","filterKey","t6","type","handleClose","t7","value","handleValueChange","t8","Symbol","for","params","handleCatchError","Component","inputComponent","t9","t10","t11","content","t12","t13","description","t14","t15","t16","Flex","styled","DEBUG_MODE","SearchFilter","DebugDocumentTypes","DebugFilterValues","FilterForm","FilterPopoverContentProps","filter","ContainerFlex","FilterPopoverContent","t0","$","_c","t1","t2","t3","CloseIcon","Button","Card","rem","useClickOutsideEvent","KeyboardEvent","useCallback","useRef","useState","styled","Popover","useTranslation","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","useSearchState","SearchFilter","getFilterKey","validateFilter","FilterLabel","FilterPopoverWrapper","FilterPopoverContent","FilterButtonProps","filter","initialOpen","CloseButton","theme","sanity","radius","CloseCard","ContainerDiv","div","LabelButton","FilterButton","t0","$","_c","open","setOpen","buttonElement","setButtonElement","popoverRef","dispatch","state","t1","definitions","fullscreen","t","t2","Symbol","for","handleClose","t3","handleOpen","t4","filterKey","type","handleRemove","t5","event","includes","key","handleKeyDown","t6","current","t7","fields","filters","operators","fieldDefinitions","filterDefinitions","operatorDefinitions","isValid","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","Flex","useCallback","useEffect","useState","Button","useTranslation","DEBUG_MODE","useSearchState","getFilterKey","AddFilterButton","DebugDocumentTypesNarrowed","DebugFilterQuery","DocumentTypesButton","FilterButton","Filters","t0","$","_c","showTypeFilter","t1","undefined","dispatch","state","t2","filters","fullscreen","lastAddedFilter","terms","t3","types","t","isMounted","setIsMounted","t4","type","handleClear","clearFiltersButtonVisible","length","t5","t6","Symbol","for","t7","lastAddedFilterKey","t8","t9","t10","clearFiltersButton","t11","t12","map","filter","key","t13","t14","t15","t16","t17","t18","t19","ArrowLeftIcon","ControlsIcon","SearchIcon","SpinnerIcon","Box","Card","Flex","ChangeEvent","useCallback","useEffect","useRef","RefAttributes","keyframes","styled","Button","StatusButton","useTranslation","useSearchState","hasSearchableTerms","CustomTextInput","rotate","AnimatedSpinnerIcon","FilterDiv","div","SearchHeaderProps","ariaInputLabel","onClose","SearchHeader","t0","$","_c","ref","isMountedRef","t","dispatch","state","t1","filters","filtersVisible","fullscreen","result","t2","terms","loading","types","query","t3","hasValidTerms","t4","ariaLabel","t5","type","visible","handleFiltersToggle","t6","e","currentTarget","value","handleQueryChange","t7","handleQueryClear","t8","t9","t10","t11","Symbol","for","current","notificationBadgeVisible","length","t12","t13","t14","content","t15","t16","t17","t18","t19","t20","context","undefined","t21","useGlobalKeyDown","useLayer","isHotkey","useCallback","GLOBAL_SEARCH_KEY","isSearchHotKey","isEscape","useSearchHotkeys","t0","$","_c","open","onClose","onOpen","isTopLayer","t1","handleClose","t2","event","preventDefault","handleGlobalKeyDown","ReactNode","useCallback","useEffect","useRef","useSearchState","useSearchHotkeys","SearchWrapperProps","children","hasValidTerms","onClose","onOpen","open","SearchWrapper","t0","$","_c","isMountedRef","dispatch","searchCommandList","setOnClose","state","t1","result","t2","index","getTopIndex","type","handleClose","t3","t4","t5","t6","t7","loaded","current","t8","t9","t10","t11","Symbol","for","ArrayDefinition","ObjectDefinition","Schema","SchemaTypeDefinition","StringDefinition","startCase","sanitizeFieldValue","getSearchableOmnisearchTypes","getSupportedFieldTypes","SearchFilterDefinition","MAX_OBJECT_TRAVERSAL_DEPTH","SearchFieldDefinition","documentTypes","fieldPath","filterName","id","name","title","titlePath","type","SearchFieldDefinitionDictionary","Record","createFieldDefinitions","schema","filterDefinitions","searchableDocumentTypeNames","map","s","objectTypes","_original","types","filter","t","isNotTypeNotIgnored","isDocumentObjectDefinition","includes","startsWith","reduce","acc","schemaType","isObjectDefinition","supportedFieldTypes","getDocumentFieldDefinitions","createFieldDefinitionDictionary","fieldDefinitions","val","generateFieldId","field","join","supportedFieldTypeSet","Set","addFieldDefinitionRecursive","defType","depth","documentType","prevFieldPath","prevTitlePath","isInternalField","existingObject","existingDocument","inlineObject","targetObject","fields","has","push","resolveFilterName","Array","Object","values","documentFields","documentField","addFieldDefinitionId","consolidatedFieldDefinitionMap","Map","fieldDefinitionWithId","consolidated","get","set","consolidatedFieldDefinitions","from","sort","sortFieldDefinitions","isArrayOfPrimitives","isArrayDefinition","of","every","item","options","list","length","isStringDefinition","isStringListDefinition","some","find","a","b","localeCompare","slice","useCallback","useMemo","useSyncObservable","merge","Subject","map","startWith","tap","useClient","useKeyValueStore","DEFAULT_STUDIO_CLIENT_OPTIONS","RECENT_SEARCH_VERSION","STORED_SEARCHES_NAMESPACE","StoredSearch","version","recentSearches","defaultValue","useStoredSearch","$","_c","keyValueStore","client","t0","config","dataset","keyValueStoreKey","t1","Symbol","for","optimisticWrites$","t2","getKey","pipe","raw","data","setKey","_temp","value$","value","t3","newValue","next","set","t4","raw_0","data_0","ObjectSchemaType","Schema","isEqual","omit","useMemo","useSchema","SearchTerms","useSource","createFieldDefinitionDictionary","createFieldDefinitions","SearchFieldDefinitionDictionary","createFilterDefinitionDictionary","SearchFilterDefinitionDictionary","createOperatorDefinitionDictionary","SearchOperatorDefinitionDictionary","SearchFilter","validateFilter","getSearchableOmnisearchTypes","useStoredSearch","MAX_RECENT_SEARCHES","RECENT_SEARCH_VERSION","RecentSearch","__recent","index","timestamp","filters","RecentSearchesStore","addSearch","searchTerm","getRecentSearches","removeSearch","removeSearchAtIndex","StoredSearch","version","recentSearches","StoredSearchItem","created","terms","Omit","typeNames","useRecentSearchesStore","$","_c","storedSearch","setStoredSearch","schema","search","t0","operators","t1","t2","t3","t4","fieldDefinitions","filterDefinitions","operatorDefinitions","t5","searchFilters","storedFilters","map","_temp","validStoredFilters","filter","filter_0","newSearchItem","Date","toISOString","query","trim","types","_temp2","newRecent","r","slice","getRecentSearchTerms","newRecent_0","length","newRecent_1","s","name","fieldId","filterName","operatorType","value","_value","sanitizeStoredSearch","studioSchema","getTime","typeName","get","jsonType","searchableTypeNames","filteredSearch","recentSearch","every","includes","newStoredSearch","ControlsIcon","Flex","Inline","Text","useTranslation","Translate","Instructions","$","_c","t","t0","Symbol","for","_temp","t1","padding","defineEvent","RecentSearchClicked","name","version","description","GlobalSearchLatencyMeasuredData","durationMs","queryLength","typeFilterCount","resultCount","strategy","errored","GlobalSearchLatencyMeasured","maxSampleRate","SchemaType","Card","Text","useMemo","useTranslation","documentTypesTruncated","TypePillsProps","availableCharacters","types","DocumentTypesPill","t0","$","_c","t","t1","title","t2","Card","styled","SearchFilter","FilterLabel","FilterPillProps","filter","FilterPillCard","FilterPill","t0","$","_c","t1","ClockIcon","CloseIcon","useTelemetry","Box","Button","Flex","Inline","rem","ResponsiveMarginProps","ResponsivePaddingProps","Text","MouseEvent","useCallback","styled","RecentSearchClicked","useSearchState","RecentSearch","useRecentSearchesStore","DocumentTypesPill","FilterPill","RecentSearchesProps","index","maxVisibleTypePillChars","value","DEFAULT_COMBINED_TYPE_COUNT","RecentSearchItemButton","theme","sanity","radius","SearchItemPillsBox","SearchItemQueryFlex","CloseButtonDiv","div","RecentSearchItem","t0","$","_c","rest","t1","undefined","dispatch","recentSearchesStore","telemetry","availableCharacters","query","length","t2","type","filters","terms","addSearch","log","handleClick","t3","event","stopPropagation","removeSearchAtIndex","handleDelete","t4","Symbol","for","t5","t6","types","t7","map","_temp","t8","t9","t10","t11","t12","t13","filter","i","Box","Card","Text","useMediaIndex","useCallback","useMemo","useRef","styled","Button","CommandList","CommandListHandle","CommandListRenderItemCallback","useTranslation","useSearchState","RecentSearch","useRecentSearchesStore","Instructions","RecentSearchItem","VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT","MAX_COMBINED_TYPE_COUNT_SMALL","MAX_COMBINED_TYPE_COUNT_LARGE","RecentSearchesBox","RecentSearchesProps","inputElement","HTMLInputElement","RecentSearches","t0","$","_c","state","t1","filtersVisible","fullscreen","recentSearchesStore","t2","getRecentSearches","recentSearches","commandListRef","t","t3","removeSearch","current","focusInputElement","handleClearRecentSearchesClick","mediaIndex","maxVisibleTypePillChars","t4","item","t5","virtualIndex","renderItem","hasRecentSearches","length","t6","t7","Container","Stack","Text","useTranslation","NoResults","$","_c","t","t0","t1","t2","t3","t4","WarningOutlineIcon","Box","Flex","TextWithTone","useTranslation","SearchError","$","_c","t","t0","Symbol","for","t1","t2","t3","t4","t5","SearchStrategy","SearchOrdering","getOrderings","context","searchStrategy","Record","createdAsc","ignoreScore","sort","direction","field","titleKey","createdDesc","relevance","customMeasurementLabel","updatedAsc","updatedDesc","SortIcon","Card","Flex","Menu","MenuDivider","isEqual","useCallback","useId","useMemo","styled","Button","MenuButton","MenuItem","useTranslation","useWorkspace","useSearchState","getOrderings","SearchOrdering","SearchDivider","type","SortMenuContentFlex","isSearchDivider","item","CustomMenuItem","t0","$","_c","ordering","t","dispatch","state","t1","currentOrdering","t2","handleClick","t3","isSelected","t4","titleKey","t5","SortMenu","strategy","searchStrategy","search","menuButtonId","orderings","Symbol","for","createdAsc","createdDesc","relevance","updatedAsc","updatedDesc","menuOrderings","T0","T1","T2","T3","t10","t11","t12","t6","t7","t8","t9","bb0","currentMenuItem","find","t13","t14","t15","map","_temp","t16","placement","portal","radius","t17","t18","t19","item_0","index","Card","CardTone","Inline","Stack","Code","styled","Tooltip","WeightedHit","DebugScoreProps","data","DebugScoreCard","DebugOverlay","t0","$","_c","score","tone","T0","T1","t1","t2","stories","matchingStories","filter","_temp","length","map","_temp2","t3","t4","t5","t6","story_0","story","path","why","StackablePerspective","Card","Flex","MouseEvent","useCallback","useDeferredValue","styled","CommandList","CommandListRenderItemCallback","useTranslation","WeightedHit","useSearchState","useRecentSearchesStore","NoResults","SearchError","SortMenu","DebugOverlay","ItemSelectHandler","SearchResultItem","VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT","VIRTUAL_LIST_OVERSCAN","SearchResultsInnerFlex","$loadingFirstPage","SearchResultsProps","disableIntentLink","inputElement","HTMLInputElement","onItemSelect","previewPerspective","previewVariant","SearchResults","t0","$","_c","dispatch","onClose","setSearchCommandList","state","t1","debug","filters","fullscreen","lastActiveIndex","result","terms","cursor","t","recentSearchesStore","deferredHits","hits","isPending","hasSearchResults","length","hasNoSearchResults","loaded","hasError","error","t2","e","addSearch","metaKey","ctrlKey","handleSearchResultClick","t3","type","handleEndReached","t4","item","hit","_id","_type","renderItem","t5","t6","t7","loading","t8","t9","t10","t11","t12","StackablePerspective","Card","Portal","useClickOutsideEvent","useLayer","AnimatePresence","motion","Transition","Variants","useRef","useState","FocusLock","styled","supportsTouch","POPOVER_INPUT_PADDING","POPOVER_MAX_HEIGHT","POPOVER_MAX_WIDTH","POPOVER_RADIUS","useSearchState","hasSearchableTerms","SearchWrapper","Filters","RecentSearches","SearchHeader","ItemSelectHandler","SearchResults","SearchPopoverProps","disableFocusLock","disableIntentLink","onClose","onItemSelect","previewPerspective","previewVariant","onOpen","open","ANIMATION_TRANSITION","duration","type","CARD_VARIANTS","opacity","scale","x","closed","OVERLAY_VARIANTS","Y_POSITION","MotionOverlay","create","SearchMotionCard","SearchPopover","t0","$","_c","inputElement","setInputElement","popoverElement","isTopLayer","zIndex","onSearchClose","state","t1","filtersVisible","terms","t2","hasValidTerms","t3","Symbol","for","current","t4","t5","t6","SearchTerms","RecentSearch","isRecentSearchTerms","terms","__recent","debug","DEBUG_FRAGMENT","rootName","debugWithName","name","Debugger","namespace","enabled","isDebugMode","window","location","hash","slice","split","includes","CurrentUser","SchemaType","SearchStrategy","SearchHit","SearchTerms","removeDupes","RecentSearch","SearchFieldDefinitionDictionary","SearchFilterDefinitionDictionary","getOrderings","getOperatorDefinition","getOperatorInitialValue","SearchOperatorDefinitionDictionary","SearchFilter","SearchOrdering","debugWithName","isDebugMode","generateFilterQuery","getFieldFromFilter","getFilterKey","narrowDocumentTypes","isRecentSearchTerms","sortTypes","PaginationState","cursor","nextCursor","SearchReducerState","currentUser","debug","definitions","SearchDefinitions","documentTypesNarrowed","filters","filtersVisible","fullscreen","lastAddedFilter","lastActiveIndex","ordering","result","SearchResult","terms","strategy","disabledDocumentIds","canDisableAction","fields","operators","error","Error","hasLocal","hits","loaded","loading","InitialSearchState","pagination","initialSearchState","searchStrategy","relevance","query","types","FiltersVisibleSet","type","visible","LastActiveIndexSet","index","PageIncrement","OrderingReset","OrderingSet","SearchClear","SearchRequestComplete","SearchRequestError","SearchRequestStart","TermsFiltersAdd","filter","TermsFiltersClear","TermsFiltersRemove","filterKey","TermsFiltersSetOperator","operatorType","TermsFiltersSetValue","value","TermsQuerySet","TermsSet","TermsTypeAdd","schemaType","TermsTypeRemove","TermsTypesClear","SearchAction","searchReducer","state","action","prefix","startsWith","stripRecent","map","hit","newFilter","fieldDefinitions","filterDefinitions","operatorDefinitions","findIndex","slice","matchedFilter","find","currentOperator","nextOperator","nextInitialValue","initialValue","inputComponentChanged","inputComponent","sort","f","fieldDefinition","documentTypes","length","every","t","s","__recent","rest","useTelemetry","isEqual","ReactNode","useCallback","useEffect","useMemo","useReducer","useRef","useState","SearchContext","CommandListHandle","useSchema","useActiveReleases","SearchHit","SearchTerms","useCurrentUser","useSource","GlobalSearchLatencyMeasured","SEARCH_LIMIT","RecentSearch","createFieldDefinitionDictionary","createFieldDefinitions","createFilterDefinitionDictionary","createOperatorDefinitionDictionary","useSearch","SearchOrdering","validateFilter","hasSearchableTerms","isRecentSearchTerms","initialSearchState","searchReducer","SearchProviderProps","children","fullscreen","disabledDocumentIds","canDisableAction","SearchProvider","t0","$","_c","onClose","setOnClose","searchCommandList","setSearchCommandList","data","releases","schema","currentUser","search","t1","operators","filters","strategy","telemetry","searchStartRef","searchStartTermsRef","t2","t3","t4","t5","fieldDefinitions","filterDefinitions","operatorDefinitions","t6","definitions","fields","pagination","cursor","nextCursor","initialState","state","dispatch","documentTypesNarrowed","currentFilters","ordering","result","terms","isMountedRef","previousOrderingRef","previousCursorRef","previousTermsRef","currentTermsRef","t7","t8","current","t9","searchResult","t0$0","startTerms","type","log","durationMs","performance","now","queryLength","query","length","typeFilterCount","types","resultCount","hits","errored","handleSearchComplete","t10","error","t0_0","startTerms_0","handleSearchError","t11","Symbol","for","currentTerms","handleSearchStart","t12","t13","onComplete","onError","onStart","handleSearch","searchState","t14","hasValidTerms","t15","t16","documentType","get","map","documentTypes","t17","filter","completeFilters","orderingChanged","cursorChanged","termsChanged","sortLabel","customMeasurementLabel","sort","field","direction","options","comments","__recent","index","limit","skipSortByScore","ignoreScore","undefined","perspective","t18","t19","t20","t21","t22","value","t23"],"sources":["../src/core/store/project/useProjectOrganizationId.ts","../src/core/store/renderingContext/useRenderingContext.ts","../src/core/components/previewCard/PreviewCard.tsx","../src/core/components/StatusButton.tsx","../src/core/environment/importMap.ts","../src/core/environment/isStaging.ts","../src/core/studio/components/navbar/search/definitions/filters.ts","../src/core/studio/components/navbar/search/contexts/search/useSearchState.ts","../src/core/studio/components/navbar/search/utils/getSchemaField.ts","../src/core/preview/utils/getPreviewValueWithFallback.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItem.tsx","../src/core/studio/components/navbar/search/constants.ts","../src/core/search/common/deriveReferenceSearchSpecs.ts","../src/core/search/common/token.ts","../src/core/search/groq2024/createReferenceResolveQuery.ts","../src/core/search/common/compileFieldPath.ts","../src/core/search/common/compileSortExpression.ts","../src/core/search/common/deriveSearchWeightsFromType2024.ts","../src/core/search/common/types.ts","../src/core/search/common/toOrderClause.ts","../src/core/search/groq2024/createSearchQuery.ts","../src/core/search/groq2024/getNextCursor.ts","../src/core/search/groq2024/createGroq2024Search.ts","../src/core/search/weighted/applyWeights.ts","../src/core/search/common/deriveSearchWeightsFromType.ts","../src/core/search/weighted/createSearchQuery.ts","../src/core/search/weighted/createWeightedSearch.ts","../src/core/search/search.ts","../src/core/studio/components/navbar/search/utils/hasSearchableTerms.ts","../src/core/search/common/getSearchableTypes.ts","../src/core/studio/components/navbar/search/utils/selectors.ts","../src/core/studio/components/navbar/search/hooks/useSearchMaxFieldDepth.ts","../src/core/studio/components/navbar/search/hooks/useSearch.ts","../src/core/studio/components/navbar/search/utils/documentTypesTruncated.ts","../src/core/studio/components/navbar/search/components/common/CustomTextInputBox.tsx","../src/core/studio/components/navbar/search/components/common/CustomTextInput.tsx","../src/core/form/components/Details.tsx","../src/core/store/studio-app/appIdCache.ts","../src/core/store/studio-app/AppIdCacheProvider.tsx","../src/core/store/studio-app/checkStudioManifestExists.ts","../src/core/store/studio-app/fetchCreateCompatibleAppId.ts","../src/core/store/studio-app/useStudioAppIdStore.ts","../src/core/util/supportsTouch.ts","../src/core/studio/components/navbar/search/definitions/operators/index.ts","../src/core/studio/components/navbar/search/utils/filterUtils.ts","../src/core/studio/components/navbar/search/components/filters/common/FilterPopoverWrapper.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterPopoverContentHeader.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/createFilterMenuItems.ts","../src/core/studio/components/navbar/search/components/common/FilterTitle.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterIcon.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterDetails.tsx","../src/core/studio/components/navbar/search/utils/sanitizeField.ts","../src/core/studio/components/navbar/search/components/filters/addFilter/items/FilterTooltip.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/items/MenuItemFilter.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/items/MenuItemHeader.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/AddFilterPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/AddFilterButton.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugDocumentTypesNarrowed.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugFilterQuery.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/items/DocumentTypeFilterItem.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/DocumentTypesPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/DocumentTypesButton.tsx","../src/core/studio/components/navbar/search/components/common/FilterLabel.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugDocumentTypes.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugFilterValues.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterError.tsx","../src/core/studio/components/navbar/search/components/filters/filter/OperatorsMenuButton.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterForm.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterButton.tsx","../src/core/studio/components/navbar/search/components/filters/Filters.tsx","../src/core/studio/components/navbar/search/components/SearchHeader.tsx","../src/core/studio/components/navbar/search/hooks/useSearchHotkeys.ts","../src/core/studio/components/navbar/search/components/common/SearchWrapper.tsx","../src/core/studio/components/navbar/search/definitions/fields.ts","../src/core/studio/components/navbar/search/datastores/useStoredSearch.ts","../src/core/studio/components/navbar/search/datastores/recentSearches.ts","../src/core/studio/components/navbar/search/components/Instructions.tsx","../src/core/studio/components/navbar/search/__telemetry__/search.telemetry.ts","../src/core/studio/components/navbar/search/components/common/DocumentTypesPill.tsx","../src/core/studio/components/navbar/search/components/common/FilterPill.tsx","../src/core/studio/components/navbar/search/components/recentSearches/item/RecentSearchItem.tsx","../src/core/studio/components/navbar/search/components/recentSearches/RecentSearches.tsx","../src/core/studio/components/navbar/search/components/NoResults.tsx","../src/core/studio/components/navbar/search/components/SearchError.tsx","../src/core/studio/components/navbar/search/definitions/getOrderings.ts","../src/core/studio/components/navbar/search/components/SortMenu.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/DebugOverlay.tsx","../src/core/studio/components/navbar/search/components/searchResults/SearchResults.tsx","../src/core/studio/components/navbar/search/components/SearchPopover.tsx","../src/core/studio/components/navbar/search/utils/isRecentSearchTerms.ts","../src/core/studio/components/navbar/search/utils/debug.ts","../src/core/studio/components/navbar/search/contexts/search/reducer.ts","../src/core/studio/components/navbar/search/contexts/search/SearchProvider.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {map, startWith} from 'rxjs'\n\nimport {useProjectStore} from '../datastores'\n\nconst INITIAL_STATE = {value: null, loading: true}\n\n/**\n * @beta\n * Returns the organization ID for the current project.\n * */\nexport function useProjectOrganizationId(): {value: string | null; loading: boolean} {\n const projectStore = useProjectStore()\n\n const obs$ = useMemo(\n () =>\n projectStore.getOrganizationId().pipe(\n map((res) => {\n return {value: res, loading: false}\n }),\n startWith({value: null, loading: true}),\n ),\n [projectStore],\n )\n\n return useObservable(obs$, INITIAL_STATE)\n}\n","import {useSyncObservable} from 'react-rx'\n\nimport {useRenderingContextStore} from '../datastores'\n\nexport function useRenderingContext() {\n const renderingContextStore = useRenderingContextStore()\n\n // Kept synchronous: the rendering context emits once at boot; deferring\n // only delays consumers reacting to it.\n return useSyncObservable(renderingContextStore.renderingContext)\n}\n","import {Card, type CardProps} from '@sanity/ui'\nimport {type ElementType, type HTMLProps, useContext, useMemo, type RefAttributes} from 'react'\nimport {PreviewCardContext} from 'sanity/_singletons'\nimport {css, styled} from 'styled-components'\n\n/** @internal */\nconst StyledCard = styled(Card)(() => {\n return css`\n /* TextWithTone uses its own logic to set color, and we therefore need */\n /* to override this logic in order to set the correct color in different states */\n &[data-selected],\n &[data-pressed],\n &:active {\n [data-ui='TextWithTone'] {\n color: inherit;\n }\n }\n `\n})\n\n/** @internal */\nexport interface PreviewCardContextValue {\n selected?: boolean\n}\n\n/** @internal */\nexport function usePreviewCard(): PreviewCardContextValue {\n const context = useContext(PreviewCardContext)\n\n if (!context) {\n throw new Error('PreviewCard: missing context value')\n }\n\n return context\n}\n\n/** @internal */\nexport function PreviewCard(\n props: CardProps<ElementType> &\n Omit<HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref'> &\n RefAttributes<HTMLDivElement>,\n) {\n const {ref, children, selected, as, ...restProps} = props\n\n const value = useMemo(() => ({selected}), [selected])\n\n return (\n <StyledCard data-ui=\"PreviewCard\" {...restProps} forwardedAs={as} ref={ref} selected={selected}>\n <PreviewCardContext.Provider value={value}>{children}</PreviewCardContext.Provider>\n </StyledCard>\n )\n}\n\n/**\n * This is a workaround for a circular import issue.\n * Calling `styled(PreviewCard)` at program load time triggered a build error with the commonjs bundle because it tried\n * to access the PreviewCard variable/symbol before it was initialized.\n * The workaround is to colocate the styled component with the component itself.\n * @internal\n */\nexport const ReferenceInputPreviewCard = styled(PreviewCard)`\n /* this is a hack to avoid layout jumps while previews are loading\n there's probably better ways of solving this */\n min-height: 36px;\n`\n","import {type HTMLProps, type ReactNode, useMemo, type RefAttributes} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, type ButtonProps} from '../../ui-components/button/Button'\n\n/** @hidden @beta */\nexport type StatusButtonProps = ButtonProps & {\n ['aria-label']: HTMLProps<HTMLButtonElement>['aria-label']\n 'forwardedAs'?: string\n 'disabled'?: boolean | {reason: ReactNode}\n 'mode'?: ButtonProps['mode']\n 'iconRight'?: undefined\n}\n\nconst StyledButton = styled(Button)`\n position: relative;\n /* The children in button is rendered inside a span, we need to absolutely position it. */\n & > span:nth-child(2) {\n position: absolute;\n top: 6px;\n right: 6px;\n padding: 0;\n }\n`\n\nconst Dot = styled.div({\n width: 4,\n height: 4,\n borderRadius: 3,\n boxShadow: '0 0 0 1px var(--card-bg-color)',\n})\n\n/** @hidden @beta */\nexport function StatusButton(\n props: StatusButtonProps &\n Omit<HTMLProps<HTMLButtonElement>, 'disabled' | 'ref' | 'size' | 'title'> &\n RefAttributes<HTMLButtonElement>,\n) {\n const {\n ref,\n disabled: disabledProp,\n 'aria-label': label,\n mode = 'bleed',\n tone,\n // `text` and `icon` stay in `restProps` so the ButtonWithText | IconButton\n // union stays correlated when spread onto the styled component.\n ...restProps\n } = props\n\n const dotStyle = useMemo(() => ({backgroundColor: `var(--card-badge-${tone}-dot-color)`}), [tone])\n const disabled = Boolean(disabledProp)\n\n return (\n <StyledButton\n data-ui=\"StatusButton\"\n {...restProps}\n aria-label={label}\n disabled={disabled}\n mode={mode}\n ref={ref}\n >\n {tone && <Dot style={dotStyle} />}\n </StyledButton>\n )\n}\n","/**\n * Returns whether or not there is a `sanity` entry in an import map in the current document,\n * which usually means that this studio is \"auto updating\".\n * @internal\n */\nexport const hasSanityPackageInImportMap = () => {\n return Boolean(getSanityImportMapUrl())\n}\n\n/**\n * Returns the url of the first `sanity` entry found in an import map in the current document\n * @internal\n */\nexport const getSanityImportMapUrl = () => {\n if (typeof document === 'undefined' || !('querySelectorAll' in document)) {\n return undefined\n }\n const importMapEntries = document.querySelectorAll('script[type=\"importmap\"]')\n let found: string | undefined\n Array.from(importMapEntries).some((entry) => {\n if (!entry.textContent) return false\n const importMap = JSON.parse(entry.textContent)\n const imports = importMap.imports || {}\n if ('sanity' in imports) {\n found = imports.sanity\n return true\n }\n return false\n })\n return found\n}\n","import {getSanityImportMapUrl} from './importMap'\n\nfunction checkIsStaging(): boolean {\n // Check the build-time constant (traditional builds)\n // @ts-expect-error: __SANITY_STAGING__ is a global env variable set by the vite config\n if (typeof __SANITY_STAGING__ !== 'undefined' && __SANITY_STAGING__ === true) {\n return true\n }\n\n // Check the runtime global (set via <script> tag for auto-updating staging deploys).\n // Uses a property access that survives tree-shaking, unlike the bare identifier above.\n // @ts-expect-error: __SANITY_STAGING__ is not in the globalThis type but may be set at runtime\n if (typeof globalThis !== 'undefined' && globalThis.__SANITY_STAGING__ === true) {\n return true\n }\n\n // For auto-updating studios, check if the import map points to the staging CDN\n const importMapUrl = getSanityImportMapUrl()\n if (importMapUrl && importMapUrl.includes('sanity-cdn.work')) {\n return true\n }\n\n return false\n}\n\n/**\n * Whether the current environment is staging.\n *\n * Checks three signals:\n * 1. The `__SANITY_STAGING__` build-time constant (set by Vite's `define` when building with\n * `SANITY_INTERNAL_ENV=staging`). This works for traditionally built studios.\n * 2. The `globalThis.__SANITY_STAGING__` runtime global. This survives tree-shaking (unlike the\n * bare identifier above, which Vite replaces statically) and can be set by injecting a\n * `<script>` tag before the module scripts run - used for auto-updating staging deploys\n * where the studio code is loaded from the production CDN.\n * 3. The import map URL - auto-updating studios load packages from a CDN, and the CDN host\n * encodes the environment (`sanity-cdn.work` for staging, `sanity-cdn.com` for production).\n * Since the import map is how the code gets loaded, it's always available when this runs.\n *\n * @internal\n */\nexport const isStaging: boolean = checkIsStaging()\n","import {type IntrinsicTypeName} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {type SearchOperatorType} from './operators/defaultOperators'\n\nexport type Operator<TOperators = string> = OperatorDivider | OperatorItem<TOperators>\n\nexport type OperatorDivider = {\n type: 'divider'\n}\n\nexport type OperatorItem<TOperators = string> = {\n name: TOperators\n type: 'item'\n}\n\ninterface SearchFilterBaseDefinition<TOperators> {\n description?: string\n icon: ComponentType\n name: string\n operators: Operator<TOperators>[]\n}\n\nexport interface SearchFilterFieldDefinition<\n TOperators = string,\n> extends SearchFilterBaseDefinition<TOperators> {\n fieldType: IntrinsicTypeName\n type: 'field'\n}\n\nexport interface SearchFilterPinnedDefinition<\n TOperators = string,\n> extends SearchFilterBaseDefinition<TOperators> {\n fieldPath?: string\n group?: string\n title: string\n type: 'pinned'\n}\n\n/**\n * @beta\n */\nexport type SearchFilterDefinition<TOperators = string> =\n | SearchFilterFieldDefinition<TOperators>\n | SearchFilterPinnedDefinition<TOperators>\n\n/**\n * @internal\n */\nexport function createFilterDefinitionDictionary(\n filterDefinitions: SearchFilterDefinition[],\n): SearchFilterDefinitionDictionary {\n return filterDefinitions.reduce<SearchFilterDefinitionDictionary>((acc, val) => {\n acc[val.name] = val\n return acc\n }, {})\n}\n\n/**\n * @alpha\n */\nexport function defineSearchFilter<TOperators = SearchOperatorType>(\n filterDef: SearchFilterDefinition<TOperators>,\n): typeof filterDef {\n return filterDef\n}\n\n/**\n * @alpha\n */\nexport function defineSearchFilterOperators<TOperators = SearchOperatorType>(\n operators: Operator<TOperators>[],\n): typeof operators {\n return operators\n}\n\nexport function getFilterDefinition(\n definitions: SearchFilterDefinitionDictionary,\n filterName: string,\n): SearchFilterDefinition | undefined {\n return definitions[filterName]\n}\n\n// TODO: we'll need to add field type to pinned filters, in order to properly infer\n// supported field types in the event all field filters are disabled / override\nexport function getSupportedFieldTypes(filterDefs: SearchFilterDefinition[]): string[] {\n return filterDefs.reduce<string[]>((acc, val) => {\n if (val.type === 'field') {\n acc.push(val.fieldType)\n }\n return acc\n }, [])\n}\n\n/**\n * @internal\n */\nexport type SearchFilterDefinitionDictionary = Record<\n SearchFilterDefinition['name'],\n SearchFilterDefinition\n>\n","import {useContext} from 'react'\nimport {SearchContext} from 'sanity/_singletons'\n\nimport {type SearchContextValue} from './SearchContext'\n\n/**\n * @internal\n */\nexport function useSearchState(): SearchContextValue {\n const context = useContext(SearchContext)\n\n if (context === undefined) {\n throw new Error('useSearchState must be used within an SearchProvider')\n }\n return context\n}\n","import {isObjectSchemaType, type ObjectField, type SchemaType} from '@sanity/types'\n\nexport function getSchemaField(schemaType: SchemaType, fieldPath: string): ObjectField | undefined {\n const paths = fieldPath.split('.')\n const firstPath = paths[0]\n if (firstPath && isObjectSchemaType(schemaType)) {\n const field = schemaType.fields.find((f) => f.name === firstPath)\n if (field) {\n const nextPath = paths.slice(1).join('.')\n if (nextPath) {\n return getSchemaField(field.type, nextPath)\n }\n return field\n }\n }\n return undefined\n}\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {type PreviewValue, type SanityDocument} from '@sanity/types'\n\nfunction getMissingDocumentFallback(document: Partial<SanityDocument> | PreviewValue) {\n return {\n title: <em>{document.title ? String(document.title) : 'Missing document'}</em>,\n subtitle: (\n <em>\n {document.title ? `Missing document ID: ${document._id}` : `Document ID: ${document._id}`}\n </em>\n ),\n media: () => <WarningOutlineIcon />,\n }\n}\n\n/**\n * @internal\n */\nexport type Sources = {\n /**\n * Preview snapshot with current perspective applied\n * This takes priority of original and fallback\n */\n snapshot?: Partial<SanityDocument> | PreviewValue | null | undefined\n /**\n * Preview of the original document (e.g. without current perspective applied)\n */\n original?: Partial<SanityDocument> | PreviewValue | null | undefined\n /**\n * last resort fallback in case we don't have anything to preview\n * this can be a hard-coded preview value, or a document stub\n */\n fallback?: Partial<SanityDocument> | PreviewValue\n}\n\nconst EMPTY: {[key: string]: never} = {}\n\n/**\n * Obtain document preview values used in <SanityPreview> and <SanityDefaultPreview> components.\n * Also displays fallback values if the document cannot be found.\n *\n * @internal\n */\nexport function getPreviewValueWithFallback({snapshot, original, fallback}: Sources) {\n return snapshot || original || getMissingDocumentFallback(fallback || EMPTY)\n}\n","import {type SchemaType} from '@sanity/types'\nimport {Badge, Box, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {styled} from 'styled-components'\n\nimport {DocumentStatus} from '../../../../../../../components/documentStatus/DocumentStatus'\nimport {DocumentStatusIndicator} from '../../../../../../../components/documentStatusIndicator/DocumentStatusIndicator'\nimport {type GeneralPreviewLayoutKey} from '../../../../../../../components/previews/types'\nimport {type PerspectiveStack} from '../../../../../../../perspective/types'\nimport {DocumentPreviewPresence} from '../../../../../../../presence/DocumentPreviewPresence'\nimport {SanityDefaultPreview} from '../../../../../../../preview/components/SanityDefaultPreview'\nimport {getPreviewStateObservable} from '../../../../../../../preview/utils/getPreviewStateObservable'\nimport {getPreviewValueWithFallback} from '../../../../../../../preview/utils/getPreviewValueWithFallback'\nimport {useDocumentVersions} from '../../../../../../../releases/hooks/useDocumentVersions'\nimport {getDocumentVersionInfoFromVersions} from '../../../../../../../releases/util/getDocumentVersionInfoFromVersions'\nimport {useDocumentPreviewStore} from '../../../../../../../store/datastores'\nimport {type DocumentPresence} from '../../../../../../../store/presence/types'\n\ninterface SearchResultItemPreviewProps {\n documentId: string\n documentType: string\n layout?: GeneralPreviewLayoutKey\n presence?: DocumentPresence[]\n perspective?: PerspectiveStack\n /**\n * The variant the preview is resolved in, as a bare variant id. Travels with `perspective`.\n */\n variant?: string\n schemaType: SchemaType\n showBadge?: boolean\n}\n\nconst INITIAL_PREVIEW_STATE = {\n snapshot: null,\n isLoading: true,\n original: null,\n}\n\n/**\n * Temporary workaround: force all nested boxes on iOS to use `background-attachment: scroll`\n * to allow <Skeleton> components to render correctly within virtual lists.\n */\nconst SearchResultItemPreviewBox = styled(Box)`\n @supports (-webkit-overflow-scrolling: touch) {\n * [data-ui='Box'] {\n background-attachment: scroll;\n }\n }\n`\n\n/**\n * @internal\n */\nexport function SearchResultItemPreview({\n documentId,\n documentType,\n layout,\n presence,\n schemaType,\n showBadge = true,\n perspective,\n variant,\n}: SearchResultItemPreviewProps) {\n const documentPreviewStore = useDocumentPreviewStore()\n\n const observable = useMemo(() => {\n return getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n perspective,\n undefined,\n variant,\n )\n }, [documentPreviewStore, schemaType, documentId, perspective, variant])\n\n const documentStub = useMemo(\n () => ({_id: documentId, _type: documentType}),\n [documentId, documentType],\n )\n\n // Deferred: react-rx v5's deferral is identity-coherent, so on a document\n // id change the live snapshot wins and the previous document's title/media\n // never renders next to the new document's version badges.\n const {isLoading, snapshot, original} = useObservable(observable, INITIAL_PREVIEW_STATE)\n\n const {versions} = useDocumentVersions({documentId})\n const versionsInfo = useMemo(() => getDocumentVersionInfoFromVersions(versions), [versions])\n\n const status = useMemo(() => {\n if (isLoading) return null\n return (\n <Flex align=\"center\" gap={3}>\n {presence && presence.length > 0 && <DocumentPreviewPresence presence={presence} />}\n {showBadge && <Badge>{schemaType.title}</Badge>}\n <DocumentStatusIndicator\n draft={versionsInfo.draft}\n published={versionsInfo.published}\n versions={versionsInfo.versions}\n />\n </Flex>\n )\n }, [\n isLoading,\n presence,\n schemaType.title,\n showBadge,\n versionsInfo.draft,\n versionsInfo.published,\n versionsInfo.versions,\n ])\n\n const tooltip = (\n <DocumentStatus\n draft={versionsInfo.draft}\n published={versionsInfo.published}\n versions={versionsInfo.versions}\n />\n )\n\n return (\n <SearchResultItemPreviewBox>\n <SanityDefaultPreview\n {...getPreviewValueWithFallback({snapshot, original, fallback: documentStub})}\n isPlaceholder={isLoading ?? true}\n layout={layout || 'default'}\n icon={schemaType.icon}\n status={status}\n tooltip={tooltip}\n />\n </SearchResultItemPreviewBox>\n )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {type SanityDocumentLike} from '@sanity/types'\nimport {Box, type ResponsiveMarginProps, type ResponsivePaddingProps} from '@sanity/ui'\nimport {type MouseEvent, useCallback, useMemo} from 'react'\nimport {useSyncObservable} from 'react-rx'\nimport {of} from 'rxjs'\nimport {useIntentLink} from 'sanity/router'\n\nimport {Tooltip} from '../../../../../../../../ui-components/tooltip/Tooltip'\nimport {PreviewCard} from '../../../../../../../components/previewCard/PreviewCard'\nimport {type GeneralPreviewLayoutKey} from '../../../../../../../components/previews/types'\nimport {useSchema} from '../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useValuePreview} from '../../../../../../../preview/useValuePreview'\nimport {useGrantsStore} from '../../../../../../../store/datastores'\nimport {useDocumentPresence} from '../../../../../../../store/presence/useDocumentPresence'\nimport {getPublishedId} from '../../../../../../../util/draftUtils'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {SearchResultItemPreview} from './SearchResultItemPreview'\n\nexport type ItemSelectHandler = (item: Pick<SanityDocumentLike, '_id' | '_type' | 'title'>) => void\n\ninterface SearchResultItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n disableIntentLink?: boolean\n documentId: string\n documentType: string\n layout?: GeneralPreviewLayoutKey\n onClick?: (e: MouseEvent<HTMLElement>) => void\n onItemSelect?: ItemSelectHandler\n previewPerspective?: StackablePerspective[]\n /**\n * The variant the result previews are resolved in, as a bare variant id.\n */\n previewVariant?: string\n}\n\nexport function SearchResultItem({\n disableIntentLink,\n documentId,\n documentType,\n layout,\n onClick,\n onItemSelect,\n previewPerspective,\n previewVariant,\n ...rest\n}: SearchResultItemProps) {\n const schema = useSchema()\n const type = schema.get(documentType)\n const documentPresence = useDocumentPresence(documentId)\n const params = useMemo(\n () => ({id: getPublishedId(documentId), type: type?.name}),\n [documentId, type?.name],\n )\n\n const {onClick: onIntentClick, href} = useIntentLink({\n intent: 'edit',\n params,\n })\n const {state} = useSearchState()\n const {t} = useTranslation()\n const grantsStore = useGrantsStore()\n\n const createPermission$ = useMemo(\n () =>\n state.canDisableAction\n ? grantsStore.checkDocumentPermission('create', {_id: documentId, _type: documentType})\n : of(null),\n [documentId, documentType, grantsStore, state.canDisableAction],\n )\n // Kept synchronous: this gates `disabledAction` together with the live\n // `documentId` release-membership check, so a deferred snapshot on a\n // recycled row could leave the new document actionable with the previous\n // row's granted permission.\n const createPermission = useSyncObservable(createPermission$, null)\n const hasCreatePermission = createPermission?.granted\n\n // the current search result exists in the release provided by the search provider\n const existsInRelease = state.disabledDocumentIds?.some((id) =>\n id.includes(getPublishedId(documentId)),\n )\n // should the search items be disasabled\n const disabledAction = (!hasCreatePermission && state.canDisableAction) || existsInRelease\n\n const documentStub = useMemo(\n () => ({_id: documentId, _type: documentType}),\n [documentId, documentType],\n )\n const preview = useValuePreview({\n enabled: true,\n schemaType: type,\n value: documentStub,\n perspectiveStack: previewPerspective,\n variant: previewVariant,\n })\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n onItemSelect?.({_id: documentId, _type: documentType, title: preview.value?.title})\n if (!disableIntentLink) {\n onIntentClick(e)\n }\n onClick?.(e)\n },\n [preview, onItemSelect, documentId, documentType, disableIntentLink, onClick, onIntentClick],\n )\n\n if (!type) return null\n\n const content = (\n <Box {...rest}>\n <PreviewCard\n as={disabledAction ? undefined : 'a'}\n data-as=\"a\"\n flex={1}\n href={disabledAction || disableIntentLink ? undefined : href}\n onClick={handleClick}\n radius={2}\n tabIndex={-1}\n style={{\n pointerEvents: disabledAction ? 'none' : undefined,\n opacity: disabledAction ? 0.5 : 1,\n }}\n >\n <SearchResultItemPreview\n documentId={documentId}\n documentType={documentType}\n layout={layout}\n perspective={previewPerspective}\n variant={previewVariant}\n presence={documentPresence}\n schemaType={type}\n />\n </PreviewCard>\n </Box>\n )\n\n const tooltipContent = existsInRelease\n ? t('release.action.already-exists-in-release')\n : t('release.action.permission.error')\n\n return disabledAction ? (\n <Tooltip content={tooltipContent} placement=\"top\">\n {content}\n </Tooltip>\n ) : (\n content\n )\n}\n","import {studioTheme} from '@sanity/ui'\n\nconst IS_MAC =\n typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\n\n// Enable debug mode when the current URL contains the below fragment.\n// Must be prefixed with `_debug_`\nexport const DEBUG_FRAGMENT = '_debug_search_score'\n\n// Display debug filter information: shared document types and field values\nexport const DEBUG_MODE = false\n\n// Max number of records to fetch per search request - intentionally set high to workaround\n// current limitations with studio search config\nexport const SEARCH_LIMIT = 1000\n\nexport const GLOBAL_SEARCH_KEY = 'k'\nexport const GLOBAL_SEARCH_KEY_MODIFIER = IS_MAC ? 'Cmd' : 'Ctrl'\n\n// oxlint-disable-next-line no-deprecated -- will fix in follow up PR\nexport const POPOVER_INPUT_PADDING = studioTheme.space[4] // px\nexport const POPOVER_MAX_HEIGHT = 735 // px\nexport const POPOVER_MAX_WIDTH = 800 // px\n\n// Custom space between buttons and popover content\nexport const POPOVER_VERTICAL_MARGIN = 5 // px\n\nexport const POPOVER_RADIUS = 3\n","import {\n isReferenceSchemaType,\n type CrossDatasetType,\n type ObjectSchemaType,\n type SchemaType,\n} from '@sanity/types'\n\n/**\n * @internal\n *\n * A searchable leaf on a *referenced* document surfaced in a list preview (e.g.\n * `subtitle: 'author.name'`). Normal search-weight derivation stops at reference\n * boundaries, so these leaves are otherwise unsearchable. We surface them by\n * resolving matching referenced documents up front and boosting the referring\n * documents via `references()` — not by compiling `author->name`, which crashes\n * `groq2024`'s `score()` and forces a non-index-accelerated per-document join.\n */\nexport interface ReferenceSearchSpec {\n targetType: string\n leafPath: string\n weight: number\n mapWith?: 'pt::text'\n}\n\nconst PREVIEW_FIELD_WEIGHT_MAP: Record<string, number> = {\n title: 10,\n subtitle: 5,\n description: 1.5,\n}\n\n// Fallback for custom selection keys (e.g. `authorName`) that aren't title/subtitle/description.\nconst DEFAULT_PREVIEW_SELECT_WEIGHT = 5\n\nconst CACHE = new WeakMap<SchemaType, Map<number, ReferenceSearchSpec[]>>()\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n type ? [type, ...getTypeChain(type.type)] : []\n\nconst isStringField = (type: SchemaType | undefined): boolean => type?.jsonType === 'string'\n\nconst isPtField = (type: SchemaType | undefined): boolean =>\n type?.jsonType === 'array' &&\n type.of.some((arrayMemberType) =>\n getTypeChain(arrayMemberType).some(({name}) => name === 'block'),\n )\n\nconst isSlugField = (type: SchemaType | undefined): boolean =>\n getTypeChain(type).some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction findFieldType(type: SchemaType | undefined, fieldName: string): SchemaType | undefined {\n for (const chainType of getTypeChain(type)) {\n if (chainType.jsonType === 'object' && chainType.fields?.length) {\n const field = chainType.fields.find(({name}) => name === fieldName)\n if (field) {\n return field.type\n }\n }\n }\n return undefined\n}\n\ninterface ResolvedLeaf {\n leafPath: string\n mapWith?: 'pt::text'\n}\n\n// Resolves the leaf path within a referenced document. Bails on a further\n// reference or array so the match stays single-hop and index-accelerated.\nfunction resolveLeaf(\n type: SchemaType | undefined,\n segments: string[],\n depth: number,\n maxDepth: number,\n): ResolvedLeaf | undefined {\n if (type === undefined || depth > maxDepth) {\n return undefined\n }\n\n if (segments.length === 0) {\n if (isPtField(type)) {\n return {leafPath: '', mapWith: 'pt::text'}\n }\n // A slug is searchable on its `.current` string - but only if that field\n // actually resolves, so a custom object named `slug` doesn't emit a dead clause.\n if (isSlugField(type) && isStringField(findFieldType(type, 'current'))) {\n return {leafPath: 'current'}\n }\n if (isStringField(type)) {\n return {leafPath: ''}\n }\n return undefined\n }\n\n const [head, ...rest] = segments\n const fieldType = findFieldType(type, head)\n if (fieldType === undefined || isReferenceSchemaType(fieldType)) {\n return undefined\n }\n\n const resolved = resolveLeaf(fieldType, rest, depth + 1, maxDepth)\n if (resolved === undefined) {\n return undefined\n }\n\n return {\n leafPath: resolved.leafPath === '' ? head : `${head}.${resolved.leafPath}`,\n mapWith: resolved.mapWith,\n }\n}\n\ninterface ReferenceBoundary {\n targetTypes: ObjectSchemaType[]\n leafSegments: string[]\n}\n\nfunction walkToReference(\n type: SchemaType | undefined,\n segments: string[],\n depth: number,\n maxDepth: number,\n): ReferenceBoundary | undefined {\n if (type === undefined || depth > maxDepth || segments.length === 0) {\n return undefined\n }\n\n const [head, ...rest] = segments\n const fieldType = findFieldType(type, head)\n if (fieldType === undefined) {\n return undefined\n }\n\n if (isReferenceSchemaType(fieldType) && 'to' in fieldType) {\n return {targetTypes: fieldType.to, leafSegments: rest}\n }\n\n return walkToReference(fieldType, rest, depth + 1, maxDepth)\n}\n\n/**\n * @internal\n *\n * Derives specs from a type's preview `select` paths that traverse a reference.\n * Only single-hop paths to a searchable leaf are supported; array paths and\n * chained references are skipped.\n */\nexport function deriveReferenceSearchSpecs({\n schemaType,\n maxDepth,\n}: {\n schemaType: SchemaType | CrossDatasetType\n maxDepth: number\n}): ReferenceSearchSpec[] {\n if (!isSchemaType(schemaType)) {\n return []\n }\n\n const cachedByDepth = CACHE.get(schemaType) ?? new Map<number, ReferenceSearchSpec[]>()\n const cached = cachedByDepth.get(maxDepth)\n if (cached) {\n return cached\n }\n\n const select = schemaType.preview?.select\n const byTargetAndLeaf = new Map<string, ReferenceSearchSpec>()\n\n for (const [selectionKey, rawPath] of Object.entries(select ?? {})) {\n // Skip array paths (e.g. `authors.0.name`): arrays of references are unsupported here.\n if (rawPath.replace(/\\.\\d+/g, '[]').includes('[]')) {\n continue\n }\n\n const boundary = walkToReference(schemaType, rawPath.split('.'), 0, maxDepth)\n if (boundary === undefined || boundary.leafSegments.length === 0) {\n continue\n }\n\n const weight = PREVIEW_FIELD_WEIGHT_MAP[selectionKey] ?? DEFAULT_PREVIEW_SELECT_WEIGHT\n\n for (const targetType of boundary.targetTypes) {\n const leaf = resolveLeaf(targetType, boundary.leafSegments, 0, maxDepth)\n if (leaf === undefined || leaf.leafPath === '') {\n continue\n }\n\n const dedupeKey = `${targetType.name}:${leaf.leafPath}`\n const existing = byTargetAndLeaf.get(dedupeKey)\n if (existing === undefined || existing.weight < weight) {\n byTargetAndLeaf.set(dedupeKey, {\n targetType: targetType.name,\n leafPath: leaf.leafPath,\n weight,\n ...(leaf.mapWith ? {mapWith: leaf.mapWith} : {}),\n })\n }\n }\n }\n\n const specs = Array.from(byTargetAndLeaf.values())\n cachedByDepth.set(maxDepth, specs)\n CACHE.set(schemaType, cachedByDepth)\n return specs\n}\n","const WILDCARD_TOKEN = '*'\nconst NEGATION_TOKEN = '-'\nconst TOKEN_REGEX = /(?:[^\\s\"]+|\"[^\"]*\")+/g\n\n/**\n * @internal\n */\nexport function isNegationToken(token: string | undefined): boolean {\n return typeof token !== 'undefined' && token.trim().at(0) === NEGATION_TOKEN\n}\n\n/**\n * @internal\n */\nexport function isPrefixToken(token: string | undefined): boolean {\n return typeof token !== 'undefined' && token.trim().at(-1) === WILDCARD_TOKEN\n}\n\n/**\n * @internal\n */\nexport function isExactMatchToken(token: string | undefined): boolean {\n return [token?.at(0), token?.at(-1)].every((character) => character === '\"')\n}\n\n/**\n * @internal\n */\nexport function prefixLast(query: string): string {\n const tokens = (query.match(TOKEN_REGEX) ?? []).map((token) => token.trim())\n\n const finalIncrementalTokenIndex = tokens.findLastIndex(\n (token) => !isNegationToken(token) && !isExactMatchToken(token),\n )\n\n const finalIncrementalToken = tokens[finalIncrementalTokenIndex]\n\n if (tokens.length === 0) {\n return WILDCARD_TOKEN\n }\n\n if (isPrefixToken(finalIncrementalToken) || typeof finalIncrementalToken === 'undefined') {\n return tokens.join(' ')\n }\n\n const prefixedTokens = [...tokens]\n prefixedTokens.splice(finalIncrementalTokenIndex, 1, `${finalIncrementalToken}${WILDCARD_TOKEN}`)\n return prefixedTokens.join(' ')\n}\n","import {type ReferenceSearchSpec} from '../common/deriveReferenceSearchSpecs'\nimport {prefixLast} from '../common/token'\n\n// Bounds the resolved-id set for very common terms. Reference matching is\n// best-effort: beyond this cap some referring documents silently won't surface.\n// Inlined as a literal because GROQ rejects a parameterised slice bound\n// (\"slicing must use constant numbers\").\nconst REFERENCE_RESOLVE_LIMIT = 1000\n\n/**\n * @internal\n */\nexport interface ReferenceResolveQuery {\n query: string\n params: {__query: string}\n}\n\n/**\n * @internal\n *\n * Builds the phase-one query resolving ids of documents whose preview-referenced\n * leaves match the term. Each clause is an index-accelerated `_type == … && leaf\n * match …`, so no per-document join occurs. Returns `undefined` when there are no\n * specs to resolve.\n */\nexport function createReferenceResolveQuery(\n specs: ReferenceSearchSpec[],\n rawQuery: string,\n): ReferenceResolveQuery | undefined {\n if (specs.length === 0) {\n return undefined\n }\n\n const clauses = Array.from(\n new Set(\n specs.map((spec) => {\n const matchTarget = spec.mapWith ? `${spec.mapWith}(${spec.leafPath})` : spec.leafPath\n return `(_type == \"${spec.targetType}\" && ${matchTarget} match text::query($__query))`\n }),\n ),\n )\n\n return {\n // Slice before projecting `._id`: `..._id[0...n]` binds the slice to the\n // `_id` string and yields `null` per element; `...[0...n]._id` is correct.\n query: `*[${clauses.join(' || ')}][0...${REFERENCE_RESOLVE_LIMIT}]._id`,\n params: {\n __query: prefixLast(rawQuery),\n },\n }\n}\n","import {\n isIndexSegment,\n isIndexTuple,\n isKeySegment,\n isReferenceSchemaType,\n type CrossDatasetType,\n type PathSegment,\n type SchemaType,\n} from '@sanity/types'\nimport {fromString as pathFromString} from '@sanity/util/paths'\n\nimport {fieldNeedsEscape} from '../../util/searchUtils'\n\nconst IMPLICIT_SCHEMA_TYPE_FIELDS = ['_id', '_type', '_createdAt', '_updatedAt', '_rev']\n\n/**\n * @internal\n *\n * Options controlling error reporting behaviour while walking a sort\n * field path against the schema.\n */\nexport interface CompileFieldPathOptions {\n /**\n * When `true`, unknown fields / unsupported path shapes throw. When\n * `false`, they `console.warn` (deduplicated) and the partial result\n * is returned.\n */\n strict?: boolean\n /**\n * Optional human-readable name of the ordering, used in error\n * messages to help developers locate the misconfigured ordering.\n */\n orderingName?: string\n /**\n * Internal flag used while probing multi-target references. When\n * `true`, resolution failures are silent — neither thrown nor\n * warned. Callers use this to try multiple reference targets\n * without surfacing per-target failures.\n *\n * @internal\n */\n silent?: boolean\n}\n\nconst warnedMessages = new Set<string>()\n\n/** @internal */\nexport function resetCompileFieldPathWarningCache(): void {\n warnedMessages.clear()\n}\n\nfunction reportError(message: string, strict: boolean, silent: boolean = false): void {\n if (silent) {\n return\n }\n if (strict) {\n throw new Error(message)\n }\n if (!warnedMessages.has(message)) {\n warnedMessages.add(message)\n console.warn(message)\n }\n}\n\nfunction formatOrderingLabel(orderingName: string | undefined): string {\n return orderingName\n ? `The sort ordering \"${orderingName}\" references`\n : 'A sort ordering references'\n}\n\n/**\n * @internal\n *\n * Compiles a single sort field path against the given schema type\n * into a GROQ expression that can be used inside a projection.\n *\n * Returns the schema-aware GROQ expression as a plain string. Every\n * compiled expression is intended to be projected into the\n * top-level `orderings[N]` array and addressed via that positional\n * index.\n *\n * Examples:\n * - `title` → `title`\n * - `author.name` (where `author` is a reference) → `author->name`\n * - `items[0].value` (where `items[]` is an array of references) →\n * `items[0]->value`\n * - `items[_key==\"abc\"].value` → `items[_key==\"abc\"]->value`\n * - `translations.se` (where `translations` is an object) →\n * `translations.se`\n * - `string::length(title)` → `string::length(title)` (treated as\n * literal GROQ since it isn't a schema-walkable path)\n *\n * If `schemaType` is `undefined` (e.g. cross-dataset, or the field\n * is a built-in like `_id`), the path is treated as a literal GROQ\n * expression — no inference is performed.\n *\n * If a path segment cannot be resolved against the schema, the\n * function reports an error via `reportError` (throwing in strict\n * mode, warning otherwise) and returns the input `fieldPath` as-is.\n */\nexport function compileFieldPath(\n schemaType: SchemaType | CrossDatasetType | undefined,\n fieldPath: string,\n options: CompileFieldPathOptions = {},\n): string {\n const {strict = false, orderingName} = options\n\n if (!fieldPath) {\n return fieldPath\n }\n\n const segments = pathFromString(fieldPath)\n\n // Top-level complex GROQ expressions (e.g. `string::length(title)`,\n // `count(items)`) are parsed as a single segment that doesn't\n // correspond to any schema field. Skip schema walking entirely\n // and treat the expression as literal GROQ.\n if (segments.length === 1 && typeof segments[0] === 'string' && fieldNeedsEscape(fieldPath)) {\n return fieldPath\n }\n\n // Cross-dataset and missing schema types: treat the path as literal\n // GROQ. No inference is possible without a schema to walk.\n if (!schemaType || !('fields' in schemaType)) {\n return fieldPath\n }\n\n const compiled = compileSegments(schemaType, segments, {strict, orderingName})\n\n // Resolution failed; fall back to the literal expression.\n return compiled ?? fieldPath\n}\n\n/**\n * Recursively compiles a parsed path against a schema type, returning\n * the resulting GROQ expression string. Returns `undefined` if the\n * path could not be fully resolved against the schema.\n */\nfunction compileSegments(\n schemaType: SchemaType | CrossDatasetType,\n path: PathSegment[],\n options: Required<Pick<CompileFieldPathOptions, 'strict'>> &\n Pick<CompileFieldPathOptions, 'orderingName' | 'silent'>,\n): string | undefined {\n const [head, ...rest] = path\n if (head === undefined) {\n return ''\n }\n\n // Numeric or keyed-access leading segments are not meaningful at\n // this level: they should always follow a field name.\n if (typeof head !== 'string') {\n reportError(\n `${formatOrderingLabel(options.orderingName)} an invalid path starting with a non-field segment.`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n if (!('fields' in schemaType)) {\n const typeLabel = 'name' in schemaType ? schemaType.name : schemaType.type\n reportError(\n `${formatOrderingLabel(options.orderingName)} the field \"${head}\" on non-object schema type \"${typeLabel}\"`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const schemaField = schemaType.fields.find((field) => field.name === head)\n if (!schemaField) {\n if (IMPLICIT_SCHEMA_TYPE_FIELDS.includes(head)) {\n // Built-in document fields that aren't declared in the schema:\n // treat as a literal field reference and stop walking.\n return joinTail(head, rest)\n }\n const validFields = schemaType.fields.map((field) => field.name).join(', ')\n reportError(\n `${formatOrderingLabel(options.orderingName)} the nonexistent field \"${head}\" on schema type \"${schemaType.name}\". Valid fields are: ${validFields}`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const nextSegment = rest[0]\n const hasArrayAccessor =\n nextSegment !== undefined &&\n (isIndexSegment(nextSegment) || isKeySegment(nextSegment) || isIndexTuple(nextSegment))\n\n if (!hasArrayAccessor) {\n return compileFieldContinuation(head, schemaField.type, rest, options)\n }\n\n // Range slices are not meaningful for ordering.\n if (isIndexTuple(nextSegment)) {\n reportError(\n `${formatOrderingLabel(options.orderingName)} a range slice on \"${head}\" on schema type \"${schemaType.name}\". Range slices are not supported for ordering.`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n if (schemaField.type.jsonType !== 'array') {\n reportError(\n `${formatOrderingLabel(options.orderingName)} array access on non-array field \"${head}\" on schema type \"${schemaType.name}\"`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const members = (\n 'of' in schemaField.type && Array.isArray(schemaField.type.of) ? schemaField.type.of : []\n ) as SchemaType[]\n if (members.length !== 1) {\n reportError(\n `${formatOrderingLabel(options.orderingName)} array access on multi-type array field \"${head}\" on schema type \"${schemaType.name}\". Array ordering requires a single member type.`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const accessor =\n typeof nextSegment === 'number' ? `[${nextSegment}]` : `[_key==\"${nextSegment._key}\"]`\n const tail = rest.slice(1)\n const memberType = members[0]\n\n return compileFieldContinuation(`${head}${accessor}`, memberType, tail, options)\n}\n\n/**\n * After a field (or array-accessed field) has been resolved, decides\n * how to continue compiling the tail of the path:\n *\n * - No tail → emit the field as a leaf.\n * - Reference field → emit `->` and recurse into the target type.\n * - Object field → emit `.` and recurse into the field's type.\n */\nfunction compileFieldContinuation(\n emittedSoFar: string,\n fieldType: SchemaType,\n tail: PathSegment[],\n options: Required<Pick<CompileFieldPathOptions, 'strict'>> &\n Pick<CompileFieldPathOptions, 'orderingName' | 'silent'>,\n): string | undefined {\n if (tail.length === 0) {\n return emittedSoFar\n }\n\n if (isReferenceSchemaType(fieldType) && 'to' in fieldType) {\n // For multi-target references, GROQ's `->` follows the first\n // target whose `_type` matches at runtime. We need to pick a\n // reference target type to walk for schema resolution. Try each\n // target in turn and return the first that successfully compiles.\n //\n // Probe each target silently — a target that doesn't match isn't\n // an error, it just means we should try the next one. If *every*\n // target fails, surface a single resolution error.\n const probeOptions = {\n strict: false as const,\n orderingName: options.orderingName,\n silent: true,\n }\n for (const refType of fieldType.to) {\n const compiled = compileSegments(refType, tail, probeOptions)\n if (compiled !== undefined) {\n return `${emittedSoFar}->${compiled}`\n }\n }\n reportError(\n `${formatOrderingLabel(options.orderingName)} a path that does not resolve against any target type of the multi-target reference at \"${emittedSoFar}\".`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const inner = compileSegments(fieldType, tail, options)\n if (inner === undefined) {\n return undefined\n }\n return `${emittedSoFar}.${inner}`\n}\n\n/**\n * Given a head segment and remaining segments that didn't undergo\n * schema resolution (e.g. for built-in fields), join them into a\n * single GROQ expression. We assume no `->` is needed past this\n * point.\n */\nfunction joinTail(head: string, tail: PathSegment[]): string {\n let out = head\n for (const seg of tail) {\n if (typeof seg === 'string') {\n out += `.${seg}`\n } else if (typeof seg === 'number') {\n out += `[${seg}]`\n } else if (isKeySegment(seg)) {\n out += `[_key==\"${seg._key}\"]`\n } else if (isIndexTuple(seg)) {\n out += `[${seg[0]}...${seg[1]}]`\n }\n }\n return out\n}\n","import {compileFieldPath, type CompileFieldPathOptions} from './compileFieldPath'\nimport {type SearchSort} from './types'\n\n/**\n * @internal\n *\n * Result of compiling a single `SearchSort` into the data needed by\n * the search strategy to project and order on the value.\n */\nexport interface CompiledSortEntry {\n /**\n * The fully-qualified GROQ expression that produces the value to\n * sort on. Inserts `->` for reference traversals inferred from the\n * schema, preserves array indexing and keyed access.\n */\n expression: string\n /**\n * Numeric index into the `orderings` projection array under which\n * the value will be projected. Always defined: every sort entry\n * is projected into `orderings` for a consistent, predictable\n * result shape.\n *\n * The projected value is available at\n * `result.orderings[projectionIndex]`.\n */\n projectionIndex: number\n}\n\n/**\n * @internal\n *\n * Compiles a `SearchSort` into the projection-ready\n * `{ expression, projectionIndex }` shape used by the search\n * strategies.\n *\n * Every entry is projected into the top-level `orderings` array —\n * there is no \"bare\" projection branch. This keeps the result\n * shape predictable and avoids needing to reason about whether a\n * particular sort field is addressable as a bare GROQ identifier.\n *\n * The compiled GROQ expression is produced by walking\n * `searchSort.schemaType` with `compileFieldPath`, which inserts\n * `->` at reference boundaries and preserves array indexing / keyed\n * access. If `searchSort.schemaType` is missing or the path can't be\n * resolved, the original `field` is used as a literal GROQ\n * expression.\n *\n * The compiled `expression` is **not** stored on `SearchSort` itself.\n * Callers thread the array of resolved entries through to anywhere\n * else it's needed (e.g. `getNextCursor`).\n */\nexport function compileSortExpression(\n searchSort: SearchSort,\n index: number,\n options: CompileFieldPathOptions = {},\n): CompiledSortEntry {\n const {field, schemaType} = searchSort\n\n const expression = field ? compileFieldPath(schemaType, field, options) : field\n\n return {\n expression,\n projectionIndex: index,\n }\n}\n","import {\n type CrossDatasetType,\n type SchemaType,\n type SearchConfiguration,\n type SlugSchemaType,\n} from '@sanity/types'\nimport {toString as pathToString} from '@sanity/util/paths'\n\nimport {isRecord} from '../../util/isRecord'\nimport {type SearchPath, type SearchSpec} from './types'\n\ninterface SearchWeightEntry {\n path: string\n weight: number\n type?: 'string' | 'pt'\n}\n\nconst CACHE = new WeakMap<SchemaType | CrossDatasetType, SearchSpec>()\n\nconst PREVIEW_FIELD_WEIGHT_MAP = {\n title: 10,\n subtitle: 5,\n description: 1.5,\n}\nconst BASE_WEIGHTS: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n _id: {weight: 1},\n _type: {weight: 1},\n}\n\n// Any object type whose fields should not be considered for custom weighting.\n//\n// Search may still match on their fields, but will not traverse their schema to find custom\n// weights.\n//\n// Some types, such as `slug`, may instead determine weights using a specialised implementation.\nconst ignoredBuiltInObjectTypes = [\n 'reference',\n 'crossDatasetReference',\n 'slug',\n 'globalDocumentReference',\n]\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n type ? [type, ...getTypeChain(type.type)] : []\n\nconst isPtField = (type: SchemaType | undefined) =>\n type?.jsonType === 'array' &&\n type.of.some((arrType) => getTypeChain(arrType).some(({name}) => name === 'block'))\n\nconst isStringField = (schemaType: SchemaType | undefined): boolean =>\n schemaType ? schemaType?.jsonType === 'string' : false\n\nconst isSlugField = (schemaType: SchemaType | undefined): schemaType is SlugSchemaType => {\n const typeChain = getTypeChain(schemaType)\n return typeChain.some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n}\n\nconst isSearchConfiguration = (options: unknown): options is SearchConfiguration =>\n isRecord(options) && 'search' in options && isRecord(options.search)\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction getFullyQualifiedPath(schemaType: SchemaType, path: string): string {\n // Slug field weights should be applied to the object's `current` field.\n if (isSlugField(schemaType)) {\n return [path, 'current'].join('.')\n }\n\n return path\n}\n\nfunction getLeafWeights(\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n getWeight: (schemaType: SchemaType, path: string) => number | null,\n): Record<string, SearchWeightEntry> {\n function traverse(\n type: SchemaType | undefined,\n path: string,\n depth: number,\n accumulator: SearchWeightEntry[] = [], // use accumulator to avoid stack overflow\n ): SearchWeightEntry[] {\n if (!type) return accumulator\n if (depth > maxDepth) return accumulator\n\n const typeChain = getTypeChain(type)\n\n if (isStringField(type) || isPtField(type)) {\n const weight = getWeight(type, path)\n\n if (typeof weight === 'number') {\n accumulator.push({path, weight})\n }\n return accumulator\n }\n\n if (isSlugField(type)) {\n const weight = getWeight(type, path)\n if (typeof weight === 'number') {\n accumulator.push({\n path: getFullyQualifiedPath(type, path),\n weight,\n })\n }\n return accumulator\n }\n\n let recursiveResult = accumulator\n for (const t of typeChain) {\n if (\n t.jsonType === 'object' &&\n !!t.fields?.length &&\n !ignoredBuiltInObjectTypes.includes(t.name)\n ) {\n for (const field of t.fields) {\n recursiveResult = traverse(\n field.type,\n pathToString([path, field.name].filter(Boolean)),\n depth + 1,\n recursiveResult,\n )\n }\n } else if (t.jsonType === 'array' && !!t.of?.length) {\n for (const arrayItemType of t.of) {\n recursiveResult = traverse(arrayItemType, `${path}[]`, depth + 1, recursiveResult)\n }\n }\n }\n return recursiveResult\n }\n\n // Cross Dataset Reference are not part of the schema, so we should not attempt to reconcile them.\n if (!isSchemaType(schemaType)) {\n return {}\n }\n\n return traverse(schemaType, '', 0).reduce<Record<string, SearchWeightEntry>>(\n (acc, {path, weight, type}) => {\n acc[path] = {weight, type, path}\n return acc\n },\n {},\n )\n}\n\nconst getUserSetWeight = (schemaType: SchemaType) => {\n const searchOptions = getTypeChain(schemaType)\n .map((type) => type.options)\n .find(isSearchConfiguration)\n\n return typeof searchOptions?.search?.weight === 'number' ? searchOptions.search.weight : null\n}\n\nconst getHiddenWeight = (schemaType: SchemaType) => {\n const hidden = getTypeChain(schemaType).some((type) => type.hidden)\n return hidden ? 0 : null\n}\n\nconst getDefaultWeights = (schemaType: SchemaType) => {\n // if there is no user set weight or a `0` weight due to be hidden,\n // then we can return the default weight of `1`\n const result = getUserSetWeight(schemaType) ?? getHiddenWeight(schemaType)\n return typeof result === 'number' ? null : 1\n}\n\nconst getPreviewWeights = (\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n isCrossDataset?: boolean,\n): Record<string, SearchWeightEntry> | null => {\n const select = schemaType?.preview?.select\n if (!select) return null\n\n const selectionKeysBySelectionPath = Object.fromEntries(\n Object.entries(select).map(([selectionKey, selectionPath]) => [\n // replace indexed paths with `[]`\n // e.g. `arrayOfObjects.0.myField` becomes `arrayOfObjects[].myField`\n selectionPath.replace(/\\.\\d+/g, '[]'),\n selectionKey,\n ]),\n )\n\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const nestedWeightsBySelectionPath = Object.fromEntries(\n Object.entries(defaultWeights)\n .map(([path, {type}]) => ({path, type}))\n .filter(({path}) => selectionKeysBySelectionPath[path])\n .map(({path, type}) => [\n path,\n {\n type,\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[\n selectionKeysBySelectionPath[path] as keyof typeof PREVIEW_FIELD_WEIGHT_MAP\n ] ?? 0,\n },\n ]),\n )\n\n if (isCrossDataset) {\n return Object.fromEntries(\n Object.entries(selectionKeysBySelectionPath).map(([path, previewFieldName]) => {\n return [\n path,\n {\n path,\n type: 'string',\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[previewFieldName as keyof typeof PREVIEW_FIELD_WEIGHT_MAP] ??\n 0,\n },\n ]\n }),\n )\n }\n\n return getLeafWeights(schemaType, maxDepth, (type, path) => {\n const nested = nestedWeightsBySelectionPath[getFullyQualifiedPath(type, path)]\n return nested ? nested.weight : null\n })\n}\n\ninterface DeriveSearchWeightsFromTypeOptions {\n schemaType: SchemaType | CrossDatasetType\n maxDepth: number\n isCrossDataset?: boolean\n processPaths?: (paths: SearchPath[]) => SearchPath[]\n}\n\nexport function deriveSearchWeightsFromType2024({\n schemaType,\n maxDepth,\n isCrossDataset,\n processPaths = (paths) => paths,\n}: DeriveSearchWeightsFromTypeOptions): SearchSpec {\n const cached = CACHE.get(schemaType)\n if (cached) return cached\n\n const userSetWeights = getLeafWeights(schemaType, maxDepth, getUserSetWeight)\n const hiddenWeights = getLeafWeights(schemaType, maxDepth, getHiddenWeight)\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const previewWeights = getPreviewWeights(schemaType, maxDepth, isCrossDataset)\n\n const weights: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n ...BASE_WEIGHTS,\n ...defaultWeights,\n ...hiddenWeights,\n ...previewWeights,\n ...userSetWeights,\n }\n\n const result = {\n typeName: isSchemaType(schemaType) ? schemaType.name : schemaType.type,\n paths: processPaths(\n Object.entries(weights).map(([path, {weight}]) => ({\n path,\n weight,\n })),\n ),\n }\n\n CACHE.set(schemaType, result)\n return result\n}\n","import {type ClientPerspective, type SanityClient} from '@sanity/client'\nimport {\n type CrossDatasetType,\n type SanityDocumentLike,\n type SchemaType,\n type SearchStrategy,\n} from '@sanity/types'\nimport {type Observable} from 'rxjs'\n\n/**\n * The top-level projection key under which schema-resolved sort\n * expressions are exposed in search results. Sort values are\n * projected as an array at `orderings`, indexed by\n * `SearchSort.projectionIndex`.\n *\n * @internal\n */\nexport const ORDERINGS_PROJECTION_KEY = 'orderings'\n\n/**\n * @internal\n */\nexport interface SearchTerms<Type extends SchemaType | CrossDatasetType = SchemaType> {\n filter?: string\n params?: Record<string, unknown>\n query: string\n types: Type[]\n}\n\n/**\n * @internal\n */\nexport interface SearchPath {\n weight: number\n path: string\n mapWith?: string\n}\n\n/**\n * @internal\n */\nexport interface SearchSpec {\n typeName: string\n paths: SearchPath[]\n}\n\n/**\n * @internal\n */\nexport interface SearchStory {\n path: string\n score: number\n why: string\n}\n\n/**\n * @internal\n */\nexport interface SearchHit {\n hit: SanityDocumentLike\n}\n\n/**\n * @internal\n */\nexport interface WeightedHit extends SearchHit {\n resultIndex: number\n score: number\n stories: SearchStory[]\n}\n\n/**\n * @internal\n */\nexport interface SearchFactoryOptions {\n maxDepth?: number\n filter?: string\n params?: Record<string, unknown>\n tag?: string\n /* only return unique documents (e.g. not both draft and published) */\n unique?: boolean\n strategy?: SearchStrategy\n perspective?: ClientPerspective\n /**\n * The selected editing variant as a bare variant id. When set, documents are searched as seen\n * through that variant, on top of `perspective`.\n */\n variant?: string\n}\n\n/**\n * @internal\n */\nexport interface WeightedSearchResults {\n type: 'weighted'\n hits: WeightedHit[]\n nextCursor?: never\n}\n\n/**\n * @internal\n */\nexport interface Groq2024SearchResults {\n type: 'groq2024'\n hits: SearchHit[]\n nextCursor?: string\n}\n\n/**\n * @internal\n */\nexport type SearchStrategyFactory<TResult extends WeightedSearchResults | Groq2024SearchResults> = (\n types: (SchemaType | CrossDatasetType)[],\n client: SanityClient,\n commonOpts: SearchFactoryOptions,\n) => (searchTerms: string | SearchTerms, searchOpts?: SearchOptions) => Observable<TResult>\n\n/**\n * @internal\n */\nexport type SearchOptions = {\n maxDepth?: number\n comments?: string[]\n skipSortByScore?: boolean\n sort?: SearchSort[]\n cursor?: string\n limit?: number\n perspective?: ClientPerspective\n /**\n * The selected editing variant as a bare variant id. When set, documents are searched as seen\n * through that variant, on top of `perspective`.\n */\n variant?: string\n isCrossDataset?: boolean\n queryType?: 'prefixLast' | 'prefixNone'\n}\n\n/**\n * @internal\n */\nexport type SortDirection = 'asc' | 'desc'\n\n/**\n * @internal\n */\nexport type SearchSort = {\n direction: SortDirection\n /**\n * The path/expression as authored by the developer (e.g.\n * `arrayOfReferences[0].favoriteBooks[0].title`). Used for stable\n * serialization (settings storage, listen-query SWR keys, etc.).\n * The projected value in result data is addressed via\n * `result.orderings[projectionIndex]`.\n */\n field: string\n /**\n * The schema type that this sort `field` is authored against. The\n * search strategy uses this to resolve the GROQ expression for\n * `field` (e.g. inserting `->` for reference traversals).\n *\n * Required when `field` traverses references, accesses arrays,\n * or otherwise depends on schema-aware compilation. Optional for\n * trivial fields like `_id` / `_createdAt` / `title`, where the\n * `field` value works as a literal GROQ expression.\n */\n schemaType?: SchemaType | CrossDatasetType\n /**\n * Index into the `orderings` projection array at which this\n * entry's value lives in the result. The projected value is\n * available at `result.orderings[projectionIndex]`.\n *\n * Populated by the search strategy after `compileSortExpression`\n * runs — not a caller-facing input. Direct callers of the search\n * strategy should leave this unset.\n */\n projectionIndex?: number\n mapWith?: string\n /**\n * Controls whether null/undefined values appear first or last in the sort order.\n *\n * Defaults match PostgreSQL behavior:\n * - `'desc'` direction → nulls first\n * - `'asc'` direction → nulls last\n *\n * **Note:** Overriding the default may have performance implications for document types\n * with lots of documents.\n */\n nulls?: 'first' | 'last'\n}\n","import {ORDERINGS_PROJECTION_KEY, type SearchSort} from './types'\n\n/**\n * Returns the GROQ expression that addresses the value being sorted\n * on, after the projection has run.\n *\n * Every sort entry is projected into the top-level `orderings`\n * array by `compileSortExpression`, so the address is always\n * `orderings[<projectionIndex>]`.\n *\n * If a caller passes a `SearchSort` without a `projectionIndex`\n * (i.e. one that hasn't been threaded through\n * `compileSortExpression`), this falls back to the literal `field`\n * so that the produced clause is at least syntactically valid.\n */\nfunction getSortTarget(ordering: SearchSort): string {\n if (ordering.projectionIndex === undefined) {\n return ordering.field\n }\n return `${ORDERINGS_PROJECTION_KEY}[${ordering.projectionIndex}]`\n}\n\n/**\n * Returns a `select(defined(...))` expression to override the default null sorting\n * behavior, or undefined if no override is needed.\n *\n * Default behavior (matches PostgreSQL):\n * - `desc` → nulls first\n * - `asc` → nulls last\n *\n * Only generates a prefix when the user explicitly requests the opposite.\n */\nfunction getNullSortingPrefix(ordering: SearchSort): string | undefined {\n const {direction, nulls} = ordering\n\n if (!nulls) return undefined\n\n const dirLower = (direction || 'asc').toLowerCase()\n\n const needsOverride =\n (dirLower === 'desc' && nulls === 'last') || (dirLower === 'asc' && nulls === 'first')\n\n if (!needsOverride) return undefined\n\n const target = getSortTarget(ordering)\n\n // nulls last: defined values sort first (0), nulls sort last (1)\n // nulls first: defined values sort last (1), nulls sort first (0)\n if (nulls === 'last') {\n return `select(defined(${target}) => 0, 1)`\n }\n return `select(defined(${target}) => 1, 0)`\n}\n\nfunction wrapFieldWithFn(ordering: SearchSort): string {\n const target = getSortTarget(ordering)\n return ordering.mapWith ? `${ordering.mapWith}(${target})` : target\n}\n\nexport function toOrderClause(orderBy: SearchSort[]): string {\n return (orderBy || [])\n .flatMap((ordering) => {\n const nullPrefix = getNullSortingPrefix(ordering)\n const fieldClause = [wrapFieldWithFn(ordering), (ordering.direction || '').toLowerCase()]\n .map((str) => str.trim())\n .filter(Boolean)\n .join(' ')\n\n return nullPrefix ? [nullPrefix, fieldClause] : [fieldClause]\n })\n .join(',')\n}\n","import {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {\n type CrossDatasetType,\n type GlobalDocumentReferenceType,\n type SchemaType,\n} from '@sanity/types'\nimport groupBy from 'lodash-es/groupBy.js'\n\nimport {compileSortExpression, type CompiledSortEntry} from '../common/compileSortExpression'\nimport {deriveSearchWeightsFromType2024} from '../common/deriveSearchWeightsFromType2024'\nimport {prefixLast} from '../common/token'\nimport {toOrderClause} from '../common/toOrderClause'\nimport {\n ORDERINGS_PROJECTION_KEY,\n type SearchFactoryOptions,\n type SearchOptions,\n type SearchSort,\n type SearchTerms,\n} from '../common/types'\n\ninterface SearchParams extends Record<string, unknown> {\n __types: string[]\n __limit: number\n __query: string\n}\n\nconst FINDABILITY_MVI = 5\nconst DEFAULT_LIMIT = 1_000\n\ninterface SearchQuery {\n query: string\n params: SearchParams\n options: Record<string, unknown>\n sortOrder: SearchSort[]\n /**\n * Compiled GROQ expressions corresponding to each entry in\n * `sortOrder`. Threaded through to `getNextCursor` so the cursor\n * predicate can address each sort field's source-document value\n * via the schema-resolved expression (e.g. `author->name`) rather\n * than the literal `field` (which would only match the projected\n * shape).\n */\n compiledSortEntries: CompiledSortEntry[]\n}\n\nfunction isSchemaType(\n maybeSchemaType: SchemaType | CrossDatasetType | undefined,\n): maybeSchemaType is SchemaType {\n return typeof maybeSchemaType !== 'undefined' && 'name' in maybeSchemaType\n}\n\n/**\n * @internal\n *\n * Published ids resolved in phase one of the reference search, surfaced via\n * `references()` rather than a `->` dereference (which `score()` rejects).\n */\nexport interface ReferenceSearchOptions {\n referenceIds?: string[]\n referenceWeight?: number\n}\n\n/**\n * @internal\n */\nexport function createSearchQuery(\n searchTerms: SearchTerms<SchemaType | CrossDatasetType | GlobalDocumentReferenceType>,\n searchParams: string | SearchTerms,\n {\n perspective,\n variant,\n sort,\n isCrossDataset,\n tag,\n maxDepth,\n cursor,\n limit,\n params,\n comments,\n filter,\n }: SearchOptions & SearchFactoryOptions = {},\n {referenceIds, referenceWeight = 5}: ReferenceSearchOptions = {},\n): SearchQuery {\n const hasReferenceIds = Array.isArray(referenceIds) && referenceIds.length > 0\n const specs = searchTerms.types\n .map((schemaType) =>\n deriveSearchWeightsFromType2024({\n schemaType,\n maxDepth: maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n isCrossDataset: isCrossDataset,\n processPaths: (paths) => paths.filter(({weight}) => weight !== 1),\n }),\n )\n .filter(({paths}) => paths.length !== 0)\n\n // Note: Computing this is unnecessary when `!isScored`.\n const flattenedSpecs = specs.flatMap(({typeName, paths}) =>\n paths.map((path) => ({...path, typeName})),\n )\n\n // Note: Computing this is unnecessary when `!isScored`.\n const groupedSpecs = groupBy(flattenedSpecs, (entry) => [entry.path, entry.weight].join(':'))\n\n const baseMatch = '([@, _id] match text::query($__query) || references($__rawQuery))'\n\n // `references()` is index-accelerated and accepted by `score()`, unlike `->`.\n const referenceBoost = hasReferenceIds ? [`boost(references($__refIds), ${referenceWeight})`] : []\n\n // Note: Computing this is unnecessary when `!isScored`.\n const score = Object.entries(groupedSpecs)\n .flatMap(([, entries]) => {\n if (entries.some(({weight}) => weight === 0)) {\n return []\n }\n return `boost(_type in ${JSON.stringify(entries.map((entry) => entry.typeName))} && ${entries[0].path} match text::query($__query), ${entries[0].weight})`\n })\n .concat(referenceBoost)\n .concat(baseMatch)\n\n const inputSortOrder = sort ?? [{field: '_score', direction: 'desc'}]\n const isScored = inputSortOrder.some(({field}) => field === '_score')\n\n // Compile each sort entry into its `{expression, projectionIndex}`\n // shape. Every entry is projected into\n // `orderings[<projectionIndex>]` — see `compileSortExpression` for\n // why we always project rather than selectively.\n const compiledSortEntries = inputSortOrder.map((entry, index) =>\n compileSortExpression(entry, index),\n )\n const sortOrder: SearchSort[] = inputSortOrder.map((entry, index) => ({\n ...entry,\n projectionIndex: compiledSortEntries[index].projectionIndex,\n }))\n\n // Unscored has no `[_score > 0]` gate, so the reference match must live in the\n // filter for documents found only through a referenced leaf to surface.\n const unscoredMatch = hasReferenceIds ? `(${baseMatch} || references($__refIds))` : baseMatch\n\n const filters: string[] = [\n '_type in $__types',\n // If the search request doesn't use scoring, directly filter documents.\n isScored ? [] : unscoredMatch,\n filter ? `(${filter})` : [],\n searchTerms.filter ? `(${searchTerms.filter})` : [],\n cursor ?? [],\n ].flat()\n\n const orderingsExpressions = compiledSortEntries.map((entry) => entry.expression)\n const orderingsProjection = `\"${ORDERINGS_PROJECTION_KEY}\": [${orderingsExpressions.join(', ')}]`\n const projection = ['_type', '_id', '_originalId', orderingsProjection].join(', ')\n\n const query = [\n `*[${filters.join(' && ')}]`,\n isScored ? ['|', `score(${score.join(', ')})`] : [],\n isScored ? `[_score > 0]` : [],\n `{${projection}}`,\n ['|', `order(${toOrderClause(sortOrder)})`],\n `[0...$__limit]`,\n ]\n .flat()\n .join(' ')\n\n const rawQuery = typeof searchParams === 'string' ? searchParams : searchParams.query\n\n const finalParams: SearchParams = {\n __types: searchTerms.types.map((type) => (isSchemaType(type) ? type.name : type.type)),\n // Overfetch by 1 to determine whether there is another page to fetch.\n __limit: (limit ?? DEFAULT_LIMIT) + 1,\n __query: prefixLast(rawQuery),\n __rawQuery: rawQuery,\n ...(hasReferenceIds ? {__refIds: referenceIds} : {}),\n ...params,\n }\n\n const pragma = [`findability-mvi:${FINDABILITY_MVI}`]\n .concat(comments || [])\n .map((s) => `// ${s}`)\n .join('\\n')\n\n return {\n query: [pragma, query].join('\\n'),\n options: {\n tag: tag,\n perspective,\n variant,\n },\n params: finalParams,\n sortOrder,\n compiledSortEntries,\n }\n}\n","import {type SanityDocumentLike} from '@sanity/types'\n\nimport {type CompiledSortEntry} from '../common/compileSortExpression'\nimport {ORDERINGS_PROJECTION_KEY, type SearchSort, type SortDirection} from '../common/types'\n\n/**\n * Builds the GROQ cursor predicate that selects documents past the\n * last result of the previous page.\n *\n * The cursor predicate runs against **source documents** in the next\n * query (it's used as a filter, not an `order(...)` argument), so\n * the comparator's left-hand side must be the schema-resolved GROQ\n * expression (e.g. `author->name`), not the projection target\n * (`orderings[0]`). The right-hand side is read from the\n * **projected** last result at\n * `lastResult.orderings[<projectionIndex>]`.\n *\n * `compiledSortEntries`, when provided, is the array of\n * `{ expression, projectionIndex }` returned by\n * `compileSortExpression` for the same sort order. When omitted\n * (direct callers / tests), the function falls back to treating\n * each sort entry's `field` as both the GROQ predicate target and\n * the result-reading key.\n *\n * @internal\n */\nexport function getNextCursor({\n lastResult,\n sortOrder,\n compiledSortEntries,\n}: {\n lastResult?: SanityDocumentLike\n sortOrder: SearchSort[]\n compiledSortEntries?: CompiledSortEntry[]\n}): string | undefined {\n if (!lastResult) {\n return undefined\n }\n\n const hasIdSort = sortOrder.some(({field}) => field === '_id')\n\n const fullSortOrder: SearchSort[] = hasIdSort\n ? sortOrder\n : sortOrder.concat({field: '_id', direction: 'asc'})\n\n return fullSortOrder.reduce<string | undefined>((cursor, sortEntry, index) => {\n const nextPredicate = fullSortOrder\n .slice(0, index)\n .map((previousSortEntry, previousIndex) =>\n getCursorPredicate(\n previousSortEntry,\n lastResult,\n '==',\n compiledSortEntries?.[previousIndex],\n ),\n )\n .concat(getCursorPredicate(sortEntry, lastResult, undefined, compiledSortEntries?.[index]))\n .filter((predicate) => typeof predicate !== 'undefined')\n .join(' && ')\n\n return [cursor, `(${nextPredicate})`]\n .filter((segment) => typeof segment !== 'undefined')\n .join(' || ')\n }, undefined)\n}\n\nconst sortComparators: Record<SortDirection, '>' | '<'> = {\n asc: '>',\n desc: '<',\n}\n\n/**\n * @internal\n *\n * Builds a single comparator predicate for the cursor. The predicate\n * targets the source-document value (via the compiled `expression`),\n * compared against the projected last-result value.\n *\n * When a `compiled` entry is provided, the source-document target is\n * `compiled.expression` and the result-side value is read from\n * `lastEntry.orderings[compiled.projectionIndex]`. When `compiled`\n * is omitted (e.g. the implicit `_id` tiebreaker, or older\n * callers), the predicate falls back to using `sort.field` for\n * both sides.\n */\nexport function getCursorPredicate(\n sort: SearchSort,\n lastEntry: SanityDocumentLike,\n comparator: '>' | '<' | '==' = sortComparators[sort.direction],\n compiled?: CompiledSortEntry,\n): string | undefined {\n if (sort.field === '_id' && comparator === '==') {\n return undefined\n }\n\n if (compiled) {\n const value = readOrderingsValue(lastEntry, compiled.projectionIndex)\n return [compiled.expression, comparator, JSON.stringify(value)].join(' ')\n }\n\n // Fallback for entries without a precomputed compiled value (e.g.\n // the implicit `_id` tiebreaker). The `field` doubles as both the\n // GROQ predicate target and the result-reading key.\n const value = (lastEntry as Record<string, unknown>)[sort.field]\n return [sort.field, comparator, JSON.stringify(value)].join(' ')\n}\n\n/**\n * Read a projected sort value from the last result at\n * `lastEntry.orderings[projectionIndex]`.\n */\nfunction readOrderingsValue(lastEntry: SanityDocumentLike, projectionIndex: number): unknown {\n const orderings = (lastEntry as Record<string, unknown>)[ORDERINGS_PROJECTION_KEY]\n if (!Array.isArray(orderings)) {\n return undefined\n }\n return orderings[projectionIndex]\n}\n","import {getPublishedId} from '@sanity/client/csm'\nimport {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {type CrossDatasetType, type SanityDocumentLike, type SchemaType} from '@sanity/types'\nimport {catchError, map, mergeMap, type Observable, of} from 'rxjs'\n\nimport {deriveReferenceSearchSpecs} from '../common/deriveReferenceSearchSpecs'\nimport {\n type Groq2024SearchResults,\n type SearchStrategyFactory,\n type SearchTerms,\n} from '../common/types'\nimport {createReferenceResolveQuery} from './createReferenceResolveQuery'\nimport {createSearchQuery} from './createSearchQuery'\nimport {getNextCursor} from './getNextCursor'\n\nfunction getSearchTerms(\n searchParams: string | SearchTerms,\n types: (SchemaType | CrossDatasetType)[],\n) {\n if (typeof searchParams === 'string') {\n return {\n query: searchParams,\n types: types,\n }\n }\n return searchParams.types.length ? searchParams : {...searchParams, types}\n}\n\n/**\n * Note: When using the `raw` persepctive, `groq2024` may emit uncollated documents, manifesting as\n * duplicate search results. Consumers must collate the results.\n *\n * @internal\n */\nexport const createGroq2024Search: SearchStrategyFactory<Groq2024SearchResults> = (\n typesFromFactory,\n client,\n factoryOptions,\n) => {\n return function search(searchParams, searchOptions = {}) {\n const searchTerms = getSearchTerms(searchParams, typesFromFactory)\n\n const mergedOptions = {\n ...factoryOptions,\n ...searchOptions,\n }\n\n const rawQuery = typeof searchParams === 'string' ? searchParams : searchParams.query\n\n // Phase-one reference resolution is skipped when there is no term or no\n // reference-traversing preview path, leaving the query identical to a plain search.\n const referenceSpecs = searchTerms.types.flatMap((schemaType) =>\n deriveReferenceSearchSpecs({\n schemaType,\n maxDepth: mergedOptions.maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n }),\n )\n const maxReferenceWeight = referenceSpecs.reduce(\n (highest, spec) => Math.max(highest, spec.weight),\n 0,\n )\n\n const runMainSearch = (referenceIds?: string[]): Observable<Groq2024SearchResults> => {\n const {query, params, options, sortOrder, compiledSortEntries} = createSearchQuery(\n searchTerms,\n searchParams,\n mergedOptions,\n {referenceIds, referenceWeight: maxReferenceWeight},\n )\n\n return client.observable.fetch<SanityDocumentLike[]>(query, params, options).pipe(\n map((hits) => {\n const hasNextPage =\n typeof searchOptions.limit !== 'undefined' && hits.length > searchOptions.limit\n\n // Search overfetches by 1 to determine whether there is another page to fetch. Therefore,\n // the penultimate result must be used to determine the start of the next page.\n const lastResult = hasNextPage ? hits.at(-2) : hits.at(-1)\n\n return {\n type: 'groq2024' as const,\n // Search overfetches by 1 to detect a next page. Slice to the effective\n // limit - falling back to `__limit - 1` when no limit was passed - so the\n // overfetched element never leaks.\n hits: hits.map((hit) => ({hit})).slice(0, searchOptions.limit ?? params.__limit - 1),\n nextCursor: hasNextPage\n ? getNextCursor({lastResult, sortOrder, compiledSortEntries})\n : undefined,\n }\n }),\n )\n }\n\n const resolveQuery = rawQuery\n ? createReferenceResolveQuery(referenceSpecs, rawQuery)\n : undefined\n\n if (resolveQuery === undefined) {\n return runMainSearch()\n }\n\n return client.observable\n .fetch<string[]>(resolveQuery.query, resolveQuery.params, {\n tag: mergedOptions.tag,\n perspective: mergedOptions.perspective,\n variant: mergedOptions.variant,\n })\n .pipe(\n // Reference resolution is an enhancement: if phase one fails, fall back\n // to a plain search rather than failing the base term-match too.\n catchError(() => of<string[]>([])),\n mergeMap((resolvedIds) => {\n // References always point at the published id, so normalise resolved\n // (possibly draft/version) ids before matching with `references()`.\n const publishedIds = Array.from(\n new Set(\n (resolvedIds ?? [])\n .filter((resolvedId): resolvedId is string => typeof resolvedId === 'string')\n .map((resolvedId) => getPublishedId(resolvedId)),\n ),\n )\n return runMainSearch(publishedIds.length > 0 ? publishedIds : undefined)\n }),\n )\n }\n}\n","import {type SanityDocumentLike} from '@sanity/types'\nimport compact from 'lodash-es/compact.js'\nimport intersection from 'lodash-es/intersection.js'\nimport keyBy from 'lodash-es/keyBy.js'\nimport partition from 'lodash-es/partition.js'\nimport toLower from 'lodash-es/toLower.js'\nimport union from 'lodash-es/union.js'\nimport uniq from 'lodash-es/uniq.js'\nimport words from 'lodash-es/words.js'\n\nimport {type SearchSpec, type WeightedHit} from '../common/types'\n\ntype SearchScore = [number, string]\n\n/**\n * Takes a set of terms and a value and returns a [score, story] pair where score is a value between 0, 1 and story is the explanation.\n *\n * @internal\n */\nconst calculateScore = (searchTerms: string[], value: string): SearchScore => {\n // Separate search terms by phrases (wrapped with quotes) and words.\n const {phrases: uniqueSearchPhrases, words: uniqueSearchWords} =\n partitionAndSanitizeSearchTerms(searchTerms)\n\n // Calculate an aggregated score of both phrase and word matches.\n const [phraseScore, phraseWhy] = calculatePhraseScore(uniqueSearchPhrases, value)\n const [wordScore, wordWhy] = calculateWordScore(uniqueSearchWords, value)\n return [phraseScore + wordScore, [wordWhy, phraseWhy].join(', ')]\n}\n\nconst stringify = (value: unknown): string =>\n typeof value === 'string' ? value : JSON.stringify(value)\n\n/**\n * @internal\n */\nexport function applyWeights(\n searchSpec: SearchSpec[],\n hits: SanityDocumentLike[],\n terms: string[] = [],\n): WeightedHit[] {\n const specByType = keyBy(searchSpec, (spec) => spec.typeName)\n return hits.map((hit, index) => {\n const typeSpec = specByType[hit._type]\n const stories = (typeSpec.paths || [])?.map((pathSpec, idx) => {\n const value = stringify(hit[`w${idx}`])\n if (!value) {\n return {path: pathSpec.path, score: 0, why: 'No match'}\n }\n const [score, why] = calculateScore(terms, value)\n return {\n path: pathSpec.path,\n score: score * pathSpec.weight,\n why: `${why} (*${pathSpec.weight})`,\n }\n })\n\n const totalScore = stories.reduce((acc, rank) => acc + rank.score, 0)\n\n return {hit, resultIndex: hits.length - index, score: totalScore, stories: stories}\n })\n}\n/**\n * For phrases: score on the total number of matching characters.\n * E.g. given the phrases [\"the fox\", \"of london\"] for the target value \"the wily fox of london\"\n *\n * - \"the fox\" isn't included in the target value (score: 0)\n * - \"of london\" is included in the target value, and 9 out of 22 characters match (score: 9/22 = ~0.408)\n * - non-exact matches have their score divided in half (final score: ~0.204)\n *\n * @internal\n */\nexport function calculatePhraseScore(uniqueSearchPhrases: string[], value: string): SearchScore {\n const sanitizedValue = value.toLowerCase().trim()\n\n let fieldScore = 0\n let matchCount = 0\n uniqueSearchPhrases.forEach((term) => {\n if (sanitizedValue.includes(term)) {\n fieldScore += term.length / sanitizedValue.length\n matchCount += term.length\n }\n })\n\n return fieldScore === 1\n ? [1, '[Phrase] Exact match']\n : [fieldScore / 2, `[Phrase] Matched ${matchCount} of ${sanitizedValue.length} characters`]\n}\n\n/**\n * For words: score on the total number of matching words.\n * E.g. given the words [\"the\", \"fox\", \"of\", \"london\"] for the target value \"the wily fox of london\"\n *\n * - 4 out of 5 words match (score: 4/5 = 0.8)\n * - non-exact matches have their score divided in half (final score: 0.4)\n *\n * @internal\n */\nexport function calculateWordScore(uniqueSearchTerms: string[], value: string): SearchScore {\n const uniqueValueTerms = uniq(compact(words(toLower(value))))\n\n const matches = intersection(uniqueSearchTerms, uniqueValueTerms)\n const all = union(uniqueValueTerms, uniqueSearchTerms)\n const fieldScore = matches.length / all.length\n return fieldScore === 1\n ? [1, '[Word] Exact match']\n : [\n fieldScore / 2,\n `[Word] Matched ${matches.length} of ${all.length} terms: [${matches.join(', ')}]`,\n ]\n}\n\n/**\n * @internal\n */\nexport function partitionAndSanitizeSearchTerms(searchTerms: string[]): {\n phrases: string[]\n words: string[]\n} {\n const uniqueSearchTerms = uniq(searchTerms.map(toLower))\n\n const [searchPhrases, searchWords] = partition(uniqueSearchTerms, (term) => /^\".*\"$/.test(term))\n return {\n phrases: uniq(searchPhrases).map(toLower).map(stripWrappingQuotes), //\n words: uniq(searchWords.map(toLower)),\n }\n}\n\nfunction stripWrappingQuotes(str: string) {\n return str.replace(/^\"(.*)\"$/, '$1')\n}\n","import {\n type CrossDatasetType,\n type SchemaType,\n type SearchConfiguration,\n type SlugSchemaType,\n} from '@sanity/types'\nimport {toString as pathToString} from '@sanity/util/paths'\n\nimport {isRecord} from '../../util/isRecord'\nimport {type SearchPath, type SearchSpec} from './types'\n\ninterface SearchWeightEntry {\n path: string\n weight: number\n type: 'string' | 'pt'\n}\n\nconst CACHE = new WeakMap<SchemaType | CrossDatasetType, SearchSpec>()\nconst PREVIEW_FIELD_WEIGHT_MAP = {\n title: 10,\n subtitle: 5,\n description: 1.5,\n}\nconst BASE_WEIGHTS: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n _id: {weight: 1, type: 'string'},\n _type: {weight: 1, type: 'string'},\n}\nconst ignoredBuiltInObjectTypes = ['reference', 'crossDatasetReference', 'slug']\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n type ? [type, ...getTypeChain(type.type)] : []\n\nconst isPtField = (type: SchemaType | undefined) =>\n type?.jsonType === 'array' &&\n type.of.some((arrType) => getTypeChain(arrType).some(({name}) => name === 'block'))\n\nconst isStringField = (schemaType: SchemaType | undefined): boolean =>\n schemaType ? schemaType?.jsonType === 'string' : false\n\nconst isSlugField = (schemaType: SchemaType | undefined): schemaType is SlugSchemaType => {\n const typeChain = getTypeChain(schemaType)\n return typeChain.some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n}\n\nconst isSearchConfiguration = (options: unknown): options is SearchConfiguration =>\n isRecord(options) && 'search' in options && isRecord(options.search)\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction getFullyQualifiedPath(schemaType: SchemaType, path: string): string {\n // Slug field weights should be applied to the object's `current` field.\n if (isSlugField(schemaType)) {\n return [path, 'current'].join('.')\n }\n\n return path\n}\n\nfunction getLeafWeights(\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n getWeight: (schemaType: SchemaType, path: string) => number | null,\n): Record<string, SearchWeightEntry> {\n function traverse(\n type: SchemaType | undefined,\n path: string,\n depth: number,\n accumulator: SearchWeightEntry[] = [], // use accumulator to avoid stack overflow\n ): SearchWeightEntry[] {\n if (!type) return accumulator\n if (depth > maxDepth) return accumulator\n\n const typeChain = getTypeChain(type)\n\n if (isStringField(type) || isPtField(type)) {\n const weight = getWeight(type, path)\n if (typeof weight === 'number') {\n accumulator.push({path, weight, type: isPtField(type) ? 'pt' : 'string'})\n }\n return accumulator\n }\n\n if (isSlugField(type)) {\n const weight = getWeight(type, path)\n if (typeof weight === 'number') {\n accumulator.push({\n path: getFullyQualifiedPath(type, path),\n weight,\n type: isPtField(type) ? 'pt' : 'string',\n })\n }\n return accumulator\n }\n\n let recursiveResult = accumulator\n for (const t of typeChain) {\n if (\n t.jsonType === 'object' &&\n !!t.fields?.length &&\n !ignoredBuiltInObjectTypes.includes(t.name)\n ) {\n for (const field of t.fields) {\n recursiveResult = traverse(\n field.type,\n pathToString([path, field.name].filter(Boolean)),\n depth + 1,\n recursiveResult,\n )\n }\n } else if (t.jsonType === 'array' && !!t.of?.length) {\n for (const arrayItemType of t.of) {\n recursiveResult = traverse(arrayItemType, `${path}[]`, depth + 1, recursiveResult)\n }\n }\n }\n\n return recursiveResult\n }\n\n // Cross Dataset Reference are not part of the schema, so we should not attempt to reconcile them.\n if (!isSchemaType(schemaType)) {\n return {}\n }\n\n return traverse(schemaType, '', 0).reduce<Record<string, SearchWeightEntry>>(\n (acc, {path, weight, type}) => {\n acc[path] = {weight, type, path}\n return acc\n },\n {},\n )\n}\n\nconst getUserSetWeight = (schemaType: SchemaType) => {\n const searchOptions = getTypeChain(schemaType)\n .map((type) => type.options)\n .find(isSearchConfiguration)\n\n return typeof searchOptions?.search?.weight === 'number' ? searchOptions.search.weight : null\n}\n\nconst getHiddenWeight = (schemaType: SchemaType) => {\n const hidden = getTypeChain(schemaType).some((type) => type.hidden)\n return hidden ? 0 : null\n}\n\nconst getDefaultWeights = (schemaType: SchemaType) => {\n // if there is no user set weight or a `0` weight due to be hidden,\n // then we can return the default weight of `1`\n const result = getUserSetWeight(schemaType) ?? getHiddenWeight(schemaType)\n return typeof result === 'number' ? null : 1\n}\n\nconst getPreviewWeights = (\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n isCrossDataset?: boolean,\n): Record<string, SearchWeightEntry> | null => {\n const select = schemaType?.preview?.select\n if (!select) return null\n\n const selectionKeysBySelectionPath = Object.fromEntries(\n Object.entries(select).map(([selectionKey, selectionPath]) => [\n // replace indexed paths with `[]`\n // e.g. `arrayOfObjects.0.myField` becomes `arrayOfObjects[].myField`\n selectionPath.replace(/\\.\\d+/g, '[]'),\n selectionKey,\n ]),\n )\n\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const nestedWeightsBySelectionPath = Object.fromEntries(\n Object.entries(defaultWeights)\n .map(([path, {type}]) => ({path, type}))\n .filter(({path}) => selectionKeysBySelectionPath[path])\n .map(({path, type}) => [\n path,\n {\n type,\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[\n selectionKeysBySelectionPath[path] as keyof typeof PREVIEW_FIELD_WEIGHT_MAP\n ],\n },\n ]),\n )\n\n if (isCrossDataset) {\n return Object.fromEntries(\n Object.entries(selectionKeysBySelectionPath).map(([path, previewFieldName]) => {\n return [\n path,\n {\n path,\n type: 'string',\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[previewFieldName as keyof typeof PREVIEW_FIELD_WEIGHT_MAP],\n },\n ]\n }),\n )\n }\n\n return getLeafWeights(schemaType, maxDepth, (type, path) => {\n const nested = nestedWeightsBySelectionPath[getFullyQualifiedPath(type, path)]\n return nested ? nested.weight : null\n })\n}\n\nexport interface DeriveSearchWeightsFromTypeOptions {\n schemaType: SchemaType | CrossDatasetType\n maxDepth: number\n isCrossDataset?: boolean\n processPaths?: (paths: SearchPath[]) => SearchPath[]\n}\n\nexport function deriveSearchWeightsFromType({\n schemaType,\n maxDepth,\n isCrossDataset,\n processPaths = (paths) => paths,\n}: DeriveSearchWeightsFromTypeOptions): SearchSpec {\n const cached = CACHE.get(schemaType)\n if (cached) return cached\n\n const userSetWeights = getLeafWeights(schemaType, maxDepth, getUserSetWeight)\n const hiddenWeights = getLeafWeights(schemaType, maxDepth, getHiddenWeight)\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const previewWeights = getPreviewWeights(schemaType, maxDepth, isCrossDataset)\n\n const weights: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n ...BASE_WEIGHTS,\n ...defaultWeights,\n ...hiddenWeights,\n ...previewWeights,\n ...userSetWeights,\n }\n\n const result = {\n typeName: isSchemaType(schemaType) ? schemaType.name : schemaType.type,\n paths: processPaths(\n Object.entries(weights).map(([path, {type, weight}]) => ({\n path,\n weight,\n ...(type === 'pt' && {mapWith: 'pt::text'}),\n })),\n ),\n }\n\n CACHE.set(schemaType, result)\n return result\n}\n","import {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {type CrossDatasetType, type SchemaType} from '@sanity/types'\nimport compact from 'lodash-es/compact.js'\nimport flatten from 'lodash-es/flatten.js'\nimport flow from 'lodash-es/flow.js'\nimport toLower from 'lodash-es/toLower.js'\nimport trim from 'lodash-es/trim.js'\nimport union from 'lodash-es/union.js'\nimport uniq from 'lodash-es/uniq.js'\nimport words from 'lodash-es/words.js'\n\nimport {compileSortExpression} from '../common/compileSortExpression'\nimport {deriveSearchWeightsFromType} from '../common/deriveSearchWeightsFromType'\nimport {toOrderClause} from '../common/toOrderClause'\nimport {\n ORDERINGS_PROJECTION_KEY,\n type SearchFactoryOptions,\n type SearchOptions,\n type SearchPath,\n type SearchSort,\n type SearchSpec,\n type SearchTerms,\n} from '../common/types'\nimport {FINDABILITY_MVI} from '../constants'\n\nexport interface SearchParams {\n __types: string[]\n __limit: number\n [key: string]: unknown\n}\n\nexport interface SearchQuery {\n query: string\n params: SearchParams\n options: Record<string, unknown>\n searchSpec: SearchSpec[]\n terms: string[]\n}\n\nexport const DEFAULT_LIMIT = 1000\n\nconst combinePaths: (paths: string[][]) => string[] = flow([flatten, union, compact])\n\nconst pathWithMapper = ({mapWith, path}: SearchPath): string =>\n mapWith ? `${mapWith}(${path})` : path\n\n/**\n * Create GROQ constraints, given search terms and the full spec of available document types and fields.\n * Essentially a large list of all possible fields (joined by logical OR) to match our search terms against.\n */\nfunction createConstraints(terms: string[], specs: SearchSpec[]) {\n const combinedSearchPaths = combinePaths(\n specs.map((configForType) => (configForType.paths || []).map((opt) => pathWithMapper(opt))),\n )\n\n const constraints = terms\n .map((_term, i) => combinedSearchPaths.map((joinedPath) => `${joinedPath} match $t${i}`))\n .filter((constraint) => constraint.length > 0)\n\n return constraints.map((constraint) => `(${constraint.join(' || ')})`)\n}\n\nconst SPECIAL_CHARS = /([^!@#$%^&*(),\\\\/?\";:{}|[\\]+<>\\s-])+/g\nconst STRIP_EDGE_CHARS = /(^[.]+)|([.]+$)/\n\nexport function tokenize(string: string): string[] {\n return (string.match(SPECIAL_CHARS) || []).map((token) => token.replace(STRIP_EDGE_CHARS, ''))\n}\n\n/**\n * Convert a string into an array of tokenized terms.\n *\n * Any (multi word) text wrapped in double quotes will be treated as \"phrases\", or separate tokens that\n * will not have its special characters removed.\n * E.g.`\"the\" \"fantastic mr\" fox fox book` =\\> [\"the\", `\"fantastic mr\"`, \"fox\", \"book\"]\n *\n * Phrases wrapped in quotes are assigned relevance scoring differently from regular words.\n *\n * @internal\n */\nexport function extractTermsFromQuery(query: string): string[] {\n const quotedQueries = [] as string[]\n const unquotedQuery = query.replace(/(\"[^\"]*\")/g, (match) => {\n if (words(match).length > 1) {\n quotedQueries.push(match)\n return ''\n }\n return match\n })\n\n // Lowercase and trim quoted queries\n const quotedTerms = quotedQueries.map((str) => trim(toLower(str)))\n\n /**\n * Convert (remaining) search query into an array of deduped, sanitized tokens.\n * All white space and special characters are removed.\n * e.g. \"The saint of Saint-Germain-des-Prés\" =\\> ['the', 'saint', 'of', 'germain', 'des', 'pres']\n */\n const remainingTerms = uniq(compact(tokenize(toLower(unquotedQuery))))\n\n return [...quotedTerms, ...remainingTerms]\n}\n\n/**\n * @internal\n */\nexport function createSearchQuery(\n searchTerms: SearchTerms<SchemaType | CrossDatasetType>,\n searchOpts: SearchOptions & SearchFactoryOptions = {},\n): SearchQuery {\n const {\n filter,\n params,\n tag,\n maxDepth,\n isCrossDataset,\n perspective,\n variant,\n sort,\n limit,\n comments,\n } = searchOpts\n\n const specs = searchTerms.types\n .map((schemaType) =>\n deriveSearchWeightsFromType({\n schemaType,\n maxDepth: maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n isCrossDataset: isCrossDataset,\n }),\n )\n .filter(({paths}) => paths.length)\n\n // Extract search terms from string query, factoring in phrases wrapped in quotes\n const terms = extractTermsFromQuery(searchTerms.query)\n\n // Construct search filters used in this GROQ query\n const filters = [\n '_type in $__types',\n ...createConstraints(terms, specs),\n filter ? `(${filter})` : '',\n searchTerms.filter ? `(${searchTerms.filter})` : '',\n ].filter(Boolean)\n\n const selections = searchOpts.skipSortByScore\n ? []\n : specs.map((spec) => {\n const constraint = `_type == \"${spec.typeName}\" => `\n if (searchOpts.skipSortByScore) {\n return undefined\n }\n const selection = `{ ${spec.paths.map((cfg, i) => `\"w${i}\": ${pathWithMapper(cfg)}`)} }`\n return `${constraint}${selection}`\n })\n\n // Default to `_id asc` (GROQ default) if no search sort is provided.\n const inputSortOrder: SearchSort[] = sort || [{field: '_id', direction: 'asc'}]\n\n const compiledSortEntries = inputSortOrder.map((entry, index) =>\n compileSortExpression(entry, index),\n )\n\n const resolvedSortOrder: SearchSort[] = inputSortOrder.map((entry, index) => ({\n ...entry,\n projectionIndex: compiledSortEntries[index].projectionIndex,\n }))\n\n const orderingsExpressions = compiledSortEntries.map((entry) => entry.expression)\n const orderingsProjection = `\"${ORDERINGS_PROJECTION_KEY}\": [${orderingsExpressions.join(', ')}]`\n const baseProjectionFields = ['_type', '_id', '_originalId']\n const selection = selections.length > 0 ? `...select(${selections.join(',\\n')})` : ''\n\n const projection = [...baseProjectionFields, orderingsProjection, selection]\n .filter(Boolean)\n .join(', ')\n\n const query = [\n `*[${filters.join(' && ')}]`,\n `{${projection}}`,\n `| order(${toOrderClause(resolvedSortOrder)})`,\n `[0...$__limit]`,\n ].join(' ')\n\n // Prepend GROQ comments\n const groqComments = [`findability-mvi:${FINDABILITY_MVI}`]\n .concat(comments || [])\n .map((s) => `// ${s}`)\n .join('\\n')\n\n const updatedQuery = groqComments ? `${groqComments}\\n${query}` : query\n\n return {\n query: updatedQuery,\n params: {\n ...toGroqParams(terms),\n __types: specs.map((spec) => spec.typeName),\n __limit: limit ?? DEFAULT_LIMIT,\n ...params,\n },\n options: {\n tag,\n perspective,\n variant,\n },\n searchSpec: specs,\n terms,\n }\n}\n\nconst toGroqParams = (terms: string[]): Record<string, string> => {\n const params: Record<string, string> = {}\n return terms.reduce((acc, term, i) => {\n acc[`t${i}`] = `${term}*` // \"t\" is short for term\n return acc\n }, params)\n}\n","import {type CrossDatasetType, type SanityDocumentLike, type SchemaType} from '@sanity/types'\nimport sortBy from 'lodash-es/sortBy.js'\nimport {map, tap} from 'rxjs/operators'\n\nimport {\n isReleasePerspective,\n RELEASES_STUDIO_CLIENT_OPTIONS,\n} from '../../releases/util/releasesClient'\nimport {versionedClient} from '../../studioClient'\nimport {removeDupes} from '../../util/draftUtils'\nimport {variantApiVersion} from '../../variants/util/variantApiVersion'\nimport {\n type SearchStrategyFactory,\n type SearchTerms,\n type WeightedSearchResults,\n} from '../common/types'\nimport {applyWeights} from './applyWeights'\nimport {createSearchQuery} from './createSearchQuery'\n\nfunction getSearchTerms(\n searchParams: string | SearchTerms,\n types: (SchemaType | CrossDatasetType)[],\n) {\n if (typeof searchParams === 'string') {\n return {\n query: searchParams,\n types: types,\n }\n }\n return searchParams.types.length ? searchParams : {...searchParams, types}\n}\n\n/**\n * @internal\n */\nexport const createWeightedSearch: SearchStrategyFactory<WeightedSearchResults> = (\n types,\n client,\n factoryOptions,\n) => {\n // Search currently supports both strings (reference + cross dataset reference inputs)\n // or a SearchTerms object (omnisearch).\n return function search(searchParams, searchOptions = {}) {\n const searchTerms = getSearchTerms(searchParams, types)\n\n const {query, params, options, searchSpec, terms} = createSearchQuery(searchTerms, {\n ...factoryOptions,\n ...searchOptions,\n })\n\n const apiVersion = variantApiVersion(\n options?.variant as string | undefined,\n isReleasePerspective(options?.perspective as string | string[] | undefined)\n ? RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion\n : undefined,\n )\n\n return versionedClient(client, apiVersion)\n .observable.fetch<SanityDocumentLike[]>(query, params, options)\n .pipe(\n factoryOptions.unique ? map(removeDupes) : tap(),\n // Assign weighting and scores based on current search terms.\n // No scores will be assigned when terms are empty.\n map((hits) => applyWeights(searchSpec, hits, terms)),\n // Optionally skip client-side score sorting.\n // This can be relevant when ordering results by specific fields, especially dates.\n searchOptions?.skipSortByScore ? tap() : map((hits) => sortBy(hits, (hit) => -hit.score)),\n map((hits) => ({type: 'weighted', hits})),\n )\n }\n}\n","import {type SearchStrategy} from '@sanity/types'\n\nimport {isReleasePerspective, RELEASES_STUDIO_CLIENT_OPTIONS} from '../releases/util/releasesClient'\nimport {versionedClient} from '../studioClient'\nimport {variantApiVersion} from '../variants/util/variantApiVersion'\nimport {\n type Groq2024SearchResults,\n type SearchStrategyFactory,\n type WeightedSearchResults,\n} from './common/types'\nimport {createGroq2024Search} from './groq2024'\nimport {createWeightedSearch} from './weighted'\n\nconst searchStrategies = {\n groqLegacy: createWeightedSearch,\n groq2024: createGroq2024Search,\n} satisfies Record<\n SearchStrategy,\n SearchStrategyFactory<WeightedSearchResults | Groq2024SearchResults>\n>\n\nconst DEFAULT_SEARCH_STRATEGY: SearchStrategy = 'groqLegacy'\n\n/** @internal */\nexport const createSearch: SearchStrategyFactory<WeightedSearchResults | Groq2024SearchResults> = (\n searchableTypes,\n client,\n options,\n) => {\n const factory = searchStrategies[options.strategy ?? DEFAULT_SEARCH_STRATEGY]\n\n const apiVersion = variantApiVersion(\n options?.variant,\n isReleasePerspective(options?.perspective)\n ? RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion\n : undefined,\n )\n\n return factory(searchableTypes, versionedClient(client, apiVersion), options)\n}\n","import {type SearchTerms} from '../../../../../search/common/types'\n\n/**\n * Check if current search terms are valid.\n *\n * By default, completely empty search terms (no search query, types or filter) are considered invalid,\n * unless `allowEmptyQueries` is true.\n */\nexport function hasSearchableTerms({\n allowEmptyQueries,\n terms,\n}: {\n allowEmptyQueries?: boolean\n terms: SearchTerms\n}): boolean {\n const hasQuery = allowEmptyQueries ? true : terms.query.length > 0\n const hasFilter = !!terms.filter\n const hasSelectedTypes = terms.types.length > 0\n\n return hasQuery || hasFilter || hasSelectedTypes\n}\n","import {type ObjectSchemaType, type Schema, type SchemaType} from '@sanity/types'\n\nimport {isNonNullable} from '../../util/isNonNullable'\n\nconst isDocumentType = (type: SchemaType): type is ObjectSchemaType =>\n Boolean(type.type && type.type.name === 'document')\n\nconst isObjectType = (type: SchemaType): type is ObjectSchemaType => type.jsonType === 'object'\n\nconst isIgnoredType = (type: SchemaType): boolean =>\n type.name.startsWith('sanity.') && type.name !== 'sanity.previewUrlSecret'\n\n/**\n * Get all defined document types from the schema that are searchable\n *\n * @param schema - The schema to get searchable types from\n * @param explicitlyAllowedTypes - Array of type names to explicitly allow, even if they are otherwise ignored. This is useful for cases where you want to allow say `sanity.imageAsset` explicitly, or an object type that was _previously_ defined as a document type, and thus still have documents.\n *\n * @internal\n */\nexport const getSearchableTypes = (\n schema: Schema,\n explicitlyAllowedTypes: string[] = [],\n): ObjectSchemaType[] =>\n schema\n .getTypeNames()\n .map((typeName) => schema.get(typeName))\n .filter(isNonNullable)\n .filter(\n (type) =>\n (isDocumentType(type) && !isIgnoredType(type)) ||\n explicitlyAllowedTypes.includes(type.name),\n )\n .filter(isObjectType)\n","import {type ObjectSchemaType, type Schema, type SchemaType} from '@sanity/types'\n\nimport {getSearchableTypes} from '../../../../../search/common/getSearchableTypes'\n\n/**\n * Returns a list of all available document types filtered by a search string.\n * Types containing the search string in its `title` or `name` will be returned.\n */\nexport function getSelectableOmnisearchTypes(schema: Schema, typeFilter: string): SchemaType[] {\n return getSearchableOmnisearchTypes(schema)\n .filter((type) => inTypeFilter(type, typeFilter))\n .sort(sortTypes)\n}\n\n/**\n * Return all searchable document types that are visible to omnisearch.\n * Documents with `__experimental_omnisearch_visibility: false` will be hidden.\n */\nexport function getSearchableOmnisearchTypes(schema: Schema): ObjectSchemaType[] {\n return getSearchableTypes(schema).filter(\n (type) => !(type.__experimental_omnisearch_visibility === false),\n )\n}\n\nexport function sortTypes(a: SchemaType, b: SchemaType): number {\n return (a.title ?? a.name).localeCompare(b.title ?? b.name)\n}\n\nfunction inTypeFilter(type: SchemaType, typeFilter: string): boolean {\n return !typeFilter || (type.title ?? type.name).toLowerCase().includes(typeFilter?.toLowerCase())\n}\n","import {type SanityClient} from '@sanity/client'\nimport {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport isFinite from 'lodash-es/isFinite.js'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map, shareReplay, startWith} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\nimport {useWorkspace} from '../../../../workspace'\n\n/** By default the API will return 0 = all fields */\nconst DEFAULT_API_FIELD_DEPTH = 0\n\n/**\n * @internal\n * @hidden\n */\nexport interface PartialIndexSettings {\n partialIndexSettings: {\n maxFieldDepth: number\n }\n}\n\ninterface Settings {\n isLoading: boolean\n settings: PartialIndexSettings\n}\n\nconst INITIAL_LOADING_STATE: Settings = {\n isLoading: true,\n settings: {\n partialIndexSettings: {\n maxFieldDepth: DEFAULT_API_FIELD_DEPTH,\n },\n },\n}\n\n/**\n * Fetches the index settings for the current dataset, if any\n */\nfunction fetchMaxDepth({client}: {client: SanityClient}): Observable<PartialIndexSettings> {\n const {projectId, dataset} = client.config()\n return client.observable.request<PartialIndexSettings>({\n uri: `/projects/${projectId}/datasets/${dataset}/settings/indexing`,\n tag: 'search.getPartialIndexSettings',\n })\n}\n\nconst cachedSettings: Map<string, Observable<PartialIndexSettings>> = new Map()\n\n/**\n * @internal\n * @hidden\n */\nexport function useSearchMaxFieldDepth(overrideClient?: SanityClient): number {\n const isEnabled = useWorkspace().search?.unstable_partialIndexing?.enabled\n const workspaceClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const client = useMemo(() => overrideClient || workspaceClient, [overrideClient, workspaceClient])\n const dataset = useMemo(() => client.config().dataset, [client])!\n\n if (!isEnabled) {\n cachedSettings.set(dataset, of(INITIAL_LOADING_STATE.settings))\n }\n\n if (!cachedSettings.has(dataset)) {\n cachedSettings.set(dataset, fetchMaxDepth({client}).pipe(shareReplay()))\n }\n\n const indexSettingsObservable = useMemo(\n () =>\n cachedSettings.get(dataset)!.pipe(\n map((settings) => ({\n isLoading: false,\n settings,\n })),\n startWith(INITIAL_LOADING_STATE),\n catchError((err: Error) => {\n console.error(err)\n return of({\n isLoading: false,\n enabled: true,\n settings: {partialIndexSettings: {maxFieldDepth: DEFAULT_API_FIELD_DEPTH}},\n })\n }),\n ),\n [dataset],\n )\n const indexSettings = useObservable(indexSettingsObservable, INITIAL_LOADING_STATE)\n\n const maxFieldDepth = indexSettings?.settings?.partialIndexSettings?.maxFieldDepth\n\n if (!isFinite(maxFieldDepth)) {\n return DEFAULT_MAX_FIELD_DEPTH\n }\n\n return Math.min(maxFieldDepth, DEFAULT_MAX_FIELD_DEPTH)\n}\n","import {type Schema} from '@sanity/types'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useMemo, useState} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {concat, EMPTY, iif, type Observable, of, timer} from 'rxjs'\nimport {\n catchError,\n debounce,\n distinctUntilChanged,\n filter,\n map,\n scan,\n switchMap,\n tap,\n} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {\n type SearchHit,\n type SearchOptions,\n type SearchTerms,\n} from '../../../../../search/common/types'\nimport {createSearch} from '../../../../../search/search'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\nimport {useWorkspace} from '../../../../workspace'\nimport {type SearchState} from '../types'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {useSearchMaxFieldDepth} from './useSearchMaxFieldDepth'\n\ninterface SearchRequest {\n debounceTime?: number\n options?: SearchOptions\n terms: SearchTerms\n}\n\nconst DEFAULT_DEBOUNCE_TIME = 300 // ms\n\nconst INITIAL_SEARCH_STATE: SearchState = {\n error: null,\n hits: [],\n loading: false,\n terms: {\n query: '',\n types: [],\n },\n}\n\nfunction nonNullable<T>(v: T): v is NonNullable<T> {\n return v !== null\n}\n\nfunction sanitizeRequest(request: SearchRequest) {\n return {\n ...request,\n terms: {\n ...request.terms,\n filter: request.terms.filter?.trim(),\n query: request.terms.query.trim(),\n },\n }\n}\n\nexport function useSearch({\n allowEmptyQueries,\n initialState,\n onComplete,\n onError,\n onStart,\n schema,\n}: {\n allowEmptyQueries?: boolean\n initialState: SearchState\n onComplete?: (result: {hits: SearchHit[]; nextCursor: string | undefined}) => void\n onError?: (error: Error) => void\n onStart?: () => void\n schema: Schema\n}): {\n handleSearch: (request: SearchRequest) => void\n searchState: SearchState\n} {\n const [searchState, setSearchState] = useState(initialState)\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const maxFieldDepth = useSearchMaxFieldDepth()\n const {strategy} = useWorkspace().search\n\n const search = useMemo(\n () =>\n createSearch(getSearchableOmnisearchTypes(schema), client, {\n tag: 'search.global',\n unique: true,\n strategy,\n maxDepth: maxFieldDepth,\n }),\n [schema, client, strategy, maxFieldDepth],\n )\n\n const handleQueryChange = useObservableEvent((inputValue$: Observable<SearchRequest | null>) => {\n return inputValue$.pipe(\n // Ignore null values\n filter(nonNullable),\n // Sanitize request (trim query and filter)\n map(sanitizeRequest),\n // Only emit when values have changed\n distinctUntilChanged(isEqual),\n // Debounce requests\n debounce((request) => timer(request?.debounceTime || DEFAULT_DEBOUNCE_TIME)),\n // Trigger `onStart` callback\n tap(onStart),\n switchMap((request) => {\n return concat(\n // Emit loading start\n of({\n ...INITIAL_SEARCH_STATE,\n loading: true,\n options: request.options,\n terms: request.terms,\n }),\n // Conditionally trigger search ONLY if we have valid searchable terms.\n // Typically, search terms are valid if either query, filter or selected types is non-empty.\n // There are exceptions (e.g. searching within <AutoComplete> components) where empty queries are permitted,\n // which is what `allowEmptyQueries` is used for.\n iif(\n () => hasSearchableTerms({allowEmptyQueries, terms: request.terms}),\n // If we have a valid search, run async fetch, map results and trigger `onComplete` / `onError` callbacks\n search(request.terms, request.options).pipe(\n tap(({hits, nextCursor}) => onComplete?.({hits, nextCursor})),\n catchError((error) => {\n onError?.(error)\n return of({\n ...INITIAL_SEARCH_STATE,\n error,\n loading: false,\n options: request.options,\n terms: request.terms,\n })\n }),\n ),\n // If there is no valid search, emit an empty observable and trigger `onComplete` event\n of(EMPTY).pipe(tap(() => onComplete?.({hits: [], nextCursor: undefined}))),\n ),\n // Emit loading completed\n of({loading: false}),\n )\n }),\n scan((prevState, nextState): SearchState => {\n return {...prevState, ...nextState}\n }, INITIAL_SEARCH_STATE),\n // Update local search state\n tap(setSearchState),\n )\n })\n\n const handleSearch = useCallback(\n (searchRequest: SearchRequest) => handleQueryChange(searchRequest),\n [handleQueryChange],\n )\n\n return {handleSearch, searchState}\n}\n","import {type SchemaType} from '@sanity/types'\n\nimport {type TFunction} from '../../../../../i18n/types'\n\nconst DEFAULT_AVAILABLE_CHARS = 40 // excluding \"+x more\" suffix\n\n/**\n * From the list of provided document types, return as many type names as possible that can fit\n * within the `availableCharacters` parameter, formatted by title where available. Includes the\n * number of remaining types that were _not_ included in the returned array of types, so a UI can\n * choose to display a \"+x more\" suffix.\n *\n * @see documentTypesTruncated for a helper function that returns a formatted string\n *\n * @param options - Options object\n * @returns An object containing truncated list of types, as well as number of excluded types\n * @internal\n */\nexport function getDocumentTypesTruncated({\n availableCharacters = DEFAULT_AVAILABLE_CHARS,\n types,\n}: {\n availableCharacters?: number\n types: SchemaType[]\n}): {types: string[]; remainingCount: number} {\n if (types.length === 0) {\n return {remainingCount: 0, types: []}\n }\n\n /**\n * Get the total number of visible document types whose titles fit within `availableCharacters` count.\n * The first document is always included, regardless of whether it fits within `availableCharacters` or not.\n */\n const visibleTypes = types.reduce<SchemaType[]>(\n (function () {\n let remaining = availableCharacters\n return function (acc, val, index) {\n const title = typeTitle(val)\n remaining -= title.length\n\n // Always include the first type, regardless of title length\n if (index === 0) {\n acc.push(val)\n } else if (availableCharacters > title.length && remaining > title.length) {\n acc.push(val)\n }\n return acc\n }\n })(),\n [],\n )\n\n return {\n remainingCount: types.length - visibleTypes.length,\n types: visibleTypes.map(typeTitle),\n }\n}\n\n/**\n * From the list of provided document types, return as many type names as possible that can fit\n * within the `availableCharacters` parameter, formatted by title where available. Includes the\n * number of remaining types that were _not_ included in the returned array of types, so a UI can\n * choose to display a \"+x more\" suffix.\n *\n * @param options - Options object\n * @returns A formatted string of types\n * @internal\n */\nexport function documentTypesTruncated({\n t,\n availableCharacters,\n types,\n}: {\n availableCharacters?: number\n types: SchemaType[]\n t: TFunction<'studio'>\n}): string {\n if (types.length === 0) {\n return t('search.document-type-list-all-types')\n }\n\n const {remainingCount, types: visibleTypes} = getDocumentTypesTruncated({\n availableCharacters,\n types,\n })\n\n const key =\n remainingCount > 0 ? 'search.document-type-list-truncated' : 'search.document-type-list'\n\n // \"Author, Book\" or \"Author, Book, Pet, Person +2 more\"\n return t(key, {\n count: remainingCount,\n types: visibleTypes,\n formatParams: {types: {style: 'short', type: 'unit'}},\n })\n}\n\nfunction typeTitle(schemaType: SchemaType) {\n return schemaType.title ?? schemaType.name\n}\n","import {Box} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const CustomTextInputBox = styled(Box)<{\n $background?: boolean\n $smallClearButton?: boolean\n}>(({$background, $smallClearButton}) => {\n return css`\n width: 100%;\n\n input + span {\n background: ${({theme}) =>\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n $background ? theme.sanity.color.card.disabled.bg2 : 'transparent'};\n }\n\n [data-qa='clear-button'] {\n background: none;\n box-shadow: none;\n display: flex; /* TODO: hack, currently used to vertically center <TextInput>'s clearButton */\n transform: ${$smallClearButton ? 'scale(0.8)' : 'scale(1)'};\n &:hover {\n opacity: 0.5;\n }\n }\n `\n})\n","import {TextInput} from '@sanity/ui'\nimport {type ComponentProps, type RefAttributes} from 'react'\n\nimport {CustomTextInputBox} from './CustomTextInputBox'\n\ninterface CustomTextInputProps extends ComponentProps<typeof TextInput> {\n $background?: boolean\n $smallClearButton?: boolean\n}\n\nexport function CustomTextInput(props: CustomTextInputProps & RefAttributes<HTMLInputElement>) {\n const {ref, $background, $smallClearButton, ...rest} = props\n\n return (\n <CustomTextInputBox $background={$background} $smallClearButton={$smallClearButton}>\n <TextInput {...rest} ref={ref} />\n </CustomTextInputBox>\n )\n}\n","import {ToggleArrowRightIcon} from '@sanity/icons/ToggleArrowRight'\nimport {Box, Flex, Text} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport {styled} from 'styled-components'\n\ninterface DetailsProps {\n children?: ReactNode\n margin?: number | number[]\n marginX?: number | number[]\n marginY?: number | number[]\n marginTop?: number | number[]\n marginRight?: number | number[]\n marginBottom?: number | number[]\n marginLeft?: number | number[]\n open?: boolean\n icon?: ReactNode\n title?: ReactNode\n}\n\nconst HeaderButton = styled.button`\n display: block;\n -webkit-font-smoothing: inherit;\n appearance: none;\n font: inherit;\n background: none;\n width: 100%;\n text-align: left;\n border: 0;\n margin: 0;\n padding: 0;\n outline: none;\n`\n\nconst ToggleArrow = styled(ToggleArrowRightIcon)<{open: boolean}>`\n transform: ${(props) => (props.open ? 'rotate(90deg)' : '')};\n`\n\nconst Header = styled(Flex)`\n cursor: default;\n line-height: 0;\n`\n\nconst IconBox = styled(Flex)`\n & > div > svg {\n transform: rotate(0);\n transition: transform 100ms;\n }\n\n &[data-open] > div > svg {\n transform: rotate(90deg);\n }\n`\n\nexport function Details(props: DetailsProps) {\n const {children, open: openProp, icon, title = 'Details', ...restProps} = props\n const [open, setOpen] = useState(openProp || false)\n\n const handleToggle = useCallback(() => setOpen((v) => !v), [])\n\n // oxlint-disable-next-line react/react-compiler\n useEffect(() => setOpen(openProp || false), [openProp])\n\n return (\n <Box {...restProps}>\n <HeaderButton type=\"button\" onClick={handleToggle}>\n <Header>\n <Flex align=\"center\">\n <IconBox data-open={open ? '' : undefined}>\n <Text size={1}>\n <ToggleArrow open={open} />\n </Text>\n </IconBox>\n {icon && <Box marginLeft={1}>{icon}</Box>}\n <Box flex={1} marginLeft={1}>\n <Text textOverflow=\"ellipsis\" size={1} weight=\"medium\">\n {title}\n </Text>\n </Box>\n </Flex>\n </Header>\n </HeaderButton>\n\n <Box hidden={!open} marginTop={3}>\n {children}\n </Box>\n </Box>\n )\n}\n","import {type CompatibleStudioAppId} from './fetchCreateCompatibleAppId'\n\nexport interface AppIdCache {\n get: (args: {\n projectId: string\n appIdFetcher: AppIdFetcher\n }) => Promise<CompatibleStudioAppId | undefined>\n}\nexport type AppIdFetcher = (projectId: string) => Promise<CompatibleStudioAppId>\n\nexport function createAppIdCache(): AppIdCache {\n const appIdCache: {\n [key: string]: CompatibleStudioAppId | Promise<CompatibleStudioAppId | undefined> | undefined\n } = {}\n\n return {\n get: async (args) => {\n const {projectId, appIdFetcher} = args\n let cacheElement = appIdCache[projectId]\n if (!cacheElement) {\n cacheElement = (async () => {\n try {\n return await appIdFetcher(projectId)\n } catch (error) {\n console.error(error)\n appIdCache[projectId] = undefined\n return undefined\n }\n })()\n appIdCache[projectId] = cacheElement\n return cacheElement\n }\n\n return cacheElement\n },\n }\n}\n","import {type ReactNode, useContext, useMemo} from 'react'\nimport {AppIdCacheContext} from 'sanity/_singletons'\n\nimport {type AppIdCache, createAppIdCache} from './appIdCache'\n\ninterface AppIdCacheProviderProps {\n children: ReactNode\n}\n\n/**\n * @internal\n */\nexport function AppIdCacheProvider(props: AppIdCacheProviderProps) {\n const {children} = props\n const parentCache = useContext(AppIdCacheContext)\n\n const cache = useMemo(() => parentCache || createAppIdCache(), [parentCache])\n\n return <AppIdCacheContext.Provider value={cache}>{children}</AppIdCacheContext.Provider>\n}\n\n/**\n * @internal\n */\nexport function useAppIdCache(): AppIdCache {\n const cache = useContext(AppIdCacheContext)\n\n if (!cache) {\n throw new Error(\n 'AppIdCache: missing context value. Ensure the component is wrapped in a AppIdCacheProvider.',\n )\n }\n\n return cache\n}\n","export async function checkStudioManifestExists(studioHostUrl: string): Promise<boolean> {\n const url = `${studioHostUrl}/static/create-manifest.json`\n try {\n const response = await fetch(url, {\n method: 'HEAD',\n })\n\n if (response.status == 404) {\n return false\n }\n\n if (response.status > 299) {\n console.error(`Failed to get manifest from ${url}`, response)\n return false\n }\n\n return true\n } catch (e) {\n console.error(`Failed to fetch from ${url}`, e)\n return false\n }\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {isStaging} from '../../environment/isStaging'\nimport {checkStudioManifestExists} from './checkStudioManifestExists'\n\nexport interface StudioAppResponse {\n id: string\n title?: string\n type: 'studio' | string\n urlType: 'internal' | 'external' | string\n appHost: string\n}\n\nexport interface StudioApp extends StudioAppResponse {\n studioUrl: string\n}\n\nexport interface CompatibleStudioAppId {\n /**\n * AppId to use for the current origin\n */\n appId: string | undefined\n\n /**\n * All available studio apps\n */\n studioApps: StudioApp[]\n}\n\nconst internalUrlSuffix = isStaging ? 'studio.sanity.work' : 'sanity.studio'\n\nasync function fetchStudiosWithUrl(\n client: SanityClient,\n projectId: string,\n internalSuffix: string,\n) {\n const apps = await client.request<StudioAppResponse[]>({\n method: 'GET',\n url: `/projects/${projectId}/user-applications`,\n })\n\n return apps.map((app) => ({\n ...app,\n studioUrl: getStudioUrl(app, internalSuffix),\n }))\n}\n\nexport async function fetchCreateCompatibleAppId(args: {\n projectId: string\n client: SanityClient\n fallbackOrigin?: string\n internalSuffix?: string\n checkStudioManifest?: (studioHost: string) => Promise<boolean>\n origin?: string\n}): Promise<CompatibleStudioAppId> {\n const {\n projectId,\n client,\n fallbackOrigin,\n internalSuffix = internalUrlSuffix,\n checkStudioManifest = checkStudioManifestExists,\n origin = window.location?.origin,\n } = args\n const appsWithStudioUrl = await fetchStudiosWithUrl(client, projectId, internalSuffix)\n\n const appMatchingOrigin = appsWithStudioUrl.find((app) => {\n return app && origin && app.studioUrl?.startsWith(origin)\n })\n\n if (appMatchingOrigin?.appHost) {\n const manifest = await checkStudioManifest(getStudioUrl(appMatchingOrigin, internalSuffix))\n if (manifest) {\n return {\n appId: appMatchingOrigin.id,\n studioApps: appsWithStudioUrl,\n }\n }\n }\n\n const appMatchingFallback = appsWithStudioUrl.find((app) => {\n return app && fallbackOrigin && app.studioUrl?.startsWith(`https://${fallbackOrigin}`)\n })\n\n return {\n appId: appMatchingFallback?.id,\n studioApps: appsWithStudioUrl,\n }\n}\n\nfunction getStudioUrl(app: StudioAppResponse, internalSuffix: string): string {\n return app.urlType === 'internal' ? `https://${app.appHost}.${internalSuffix}` : app.appHost\n}\n","import {useEffect, useMemo, useState} from 'react'\n\nimport {useClient} from '../../hooks/useClient'\nimport {useSource} from '../../studio/source'\nimport {type AppIdCache, type AppIdFetcher} from './appIdCache'\nimport {useAppIdCache} from './AppIdCacheProvider'\nimport {type CompatibleStudioAppId, fetchCreateCompatibleAppId} from './fetchCreateCompatibleAppId'\n\nexport interface ResolvedStudioApp {\n loading: boolean\n studioApp?: CompatibleStudioAppId\n}\n\n/**\n * Fetches & caches the Studio appId for the current origin.\n *\n * @internal\n */\nexport function useStudioAppIdStore(config: {\n enabled: boolean\n fallbackStudioOrigin?: string\n}): ResolvedStudioApp {\n const client = useClient({apiVersion: '2024-09-01'})\n const cache = useAppIdCache()\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {projectId} = useSource()\n\n const appIdFetcher: AppIdFetcher = useMemo(() => {\n return (pId) =>\n fetchCreateCompatibleAppId({\n projectId: pId,\n client,\n fallbackOrigin: config.fallbackStudioOrigin,\n })\n }, [client, config.fallbackStudioOrigin])\n\n return useStudioAppIdStoreInner({\n projectId,\n cache,\n appIdFetcher,\n enabled: config.enabled,\n })\n}\n\nexport function useStudioAppIdStoreInner(props: {\n cache: AppIdCache\n projectId: string\n enabled: boolean\n appIdFetcher: AppIdFetcher\n}): ResolvedStudioApp {\n const {cache, enabled, appIdFetcher, projectId} = props\n const [loading, setLoading] = useState(false)\n\n const [studioApp, setStudioApp] = useState<CompatibleStudioAppId | undefined>()\n\n useEffect(() => {\n let mounted = true\n async function getAppId() {\n if (!projectId) {\n return\n }\n setLoading(true)\n\n try {\n const entry = await cache.get({projectId, appIdFetcher})\n if (mounted) setStudioApp(entry)\n } catch {\n if (mounted) setStudioApp(undefined)\n }\n if (mounted) setLoading(false)\n }\n\n if (enabled) {\n getAppId().catch(console.error)\n }\n return () => {\n mounted = false\n setLoading(false)\n }\n }, [setLoading, appIdFetcher, cache, enabled, projectId])\n\n return {\n loading,\n studioApp,\n }\n}\n","/** @internal */\nexport const supportsTouch = isTouchDevice()\n\nfunction isTouchDevice() {\n if (typeof window === 'undefined') return false\n\n return (\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (navigator as any).msMaxTouchPoints > 0\n )\n}\n","import {\n type SearchOperatorBase,\n type SearchOperatorButtonValue,\n type SearchOperatorInput,\n type SearchOperatorParams,\n} from './operatorTypes'\n\n/** @internal */\nexport interface SearchOperatorDefinition<TValue = any> extends SearchOperatorBase {\n buttonValueComponent?: SearchOperatorButtonValue<TValue>\n groqFilter: (params: SearchOperatorParams<TValue>) => string | null\n initialValue?: TValue\n inputComponent?: SearchOperatorInput<TValue>\n type: string\n}\n\nexport function createOperatorDefinitionDictionary(\n operatorDefinitions: SearchOperatorDefinition[],\n): SearchOperatorDefinitionDictionary {\n return operatorDefinitions.reduce<SearchOperatorDefinitionDictionary>((acc, val) => {\n acc[val.type] = val\n return acc\n }, {})\n}\n\nexport function getOperatorDefinition(\n operators: SearchOperatorDefinitionDictionary,\n operatorType?: string,\n): SearchOperatorDefinition | undefined {\n return operatorType ? operators[operatorType] : undefined\n}\n\nexport function getOperatorInitialValue(\n operators: SearchOperatorDefinitionDictionary,\n operatorType: string,\n): SearchOperatorDefinition['initialValue'] | undefined {\n return getOperatorDefinition(operators, operatorType)?.initialValue\n}\n\n/** @internal */\nexport type SearchOperatorDefinitionDictionary = Record<\n SearchOperatorDefinition['type'],\n SearchOperatorDefinition\n>\n","import {type SchemaType} from '@sanity/types'\nimport intersection from 'lodash-es/intersection.js'\nimport isEmpty from 'lodash-es/isEmpty.js'\n\nimport {isNonNullable} from '../../../../../util/isNonNullable'\nimport {\n type SearchFieldDefinition,\n type SearchFieldDefinitionDictionary,\n} from '../definitions/fields'\nimport {\n getFilterDefinition,\n type OperatorItem,\n type SearchFilterDefinition,\n type SearchFilterDefinitionDictionary,\n} from '../definitions/filters'\nimport {\n getOperatorDefinition,\n type SearchOperatorDefinitionDictionary,\n} from '../definitions/operators'\nimport {type SearchFilter} from '../types'\n\nexport function buildSearchFilter(\n filterDefinition: SearchFilterDefinition,\n fieldId?: string,\n): SearchFilter {\n return {\n fieldId,\n filterName: filterDefinition.name,\n operatorType:\n filterDefinition?.operators.find((operator): operator is OperatorItem => {\n return operator.type === 'item'\n })?.name || '',\n }\n}\n\nexport function generateFilterQuery({\n fieldDefinitions,\n filterDefinitions,\n filters,\n operatorDefinitions,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n filters: SearchFilter[]\n operatorDefinitions: SearchOperatorDefinitionDictionary\n}): string {\n return filters\n .filter((filter) =>\n validateFilter({\n filter,\n filterDefinitions,\n fieldDefinitions,\n operatorDefinitions,\n }),\n )\n .map((filter) => {\n return getOperatorDefinition(operatorDefinitions, filter.operatorType)?.groqFilter({\n fieldPath: resolveFieldPath({filter, fieldDefinitions, filterDefinitions}),\n value: filter?.value,\n })\n })\n .filter((filter) => !isEmpty(filter))\n .filter(isNonNullable)\n .join(' && ')\n}\n\nexport function getFieldFromFilter(\n fields: SearchFieldDefinitionDictionary,\n filter: SearchFilter,\n): SearchFieldDefinition | undefined {\n return filter?.fieldId ? fields[filter.fieldId] : undefined\n}\n\nexport function getFilterKey(filter: SearchFilter): string {\n return [filter.filterName, ...(filter.fieldId ? [filter.fieldId] : [])].join('-')\n}\n\nexport function narrowDocumentTypes({\n fieldDefinitions,\n filters,\n types,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filters: SearchFilter[]\n types: SchemaType[]\n}): string[] {\n // Get all 'manually' selected document types\n const selectedDocumentTypes = types.map((type) => type.name)\n\n const filteredDocumentTypes = Object.values(fieldDefinitions)\n .filter((field) => filters.map((filter) => filter?.fieldId).includes(field.id))\n .filter((field) => field.documentTypes.length > 0)\n .map((field) => field.documentTypes)\n\n // Get intersecting document types across all active filters (that have at least one document type).\n // Filters that have no document types (i.e. `_updatedAt` which is available to all) are ignored.\n const intersectingDocumentTypes = intersection(...filteredDocumentTypes)\n\n const documentTypes: string[][] = []\n if (selectedDocumentTypes.length > 0) {\n documentTypes.push(selectedDocumentTypes)\n }\n if (intersectingDocumentTypes.length > 0) {\n documentTypes.push(intersectingDocumentTypes)\n }\n\n return intersection(...documentTypes).sort()\n}\n\nfunction resolveFieldPath({\n filter,\n fieldDefinitions,\n filterDefinitions,\n}: {\n filter: SearchFilter\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n}): string | undefined {\n const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n const filterDefinition = getFilterDefinition(filterDefinitions, filter.filterName)\n\n if (!filterDefinition) {\n return undefined\n }\n\n switch (filterDefinition.type) {\n case 'field':\n return fieldDefinition?.fieldPath\n case 'pinned':\n return filterDefinition?.fieldPath\n default:\n return undefined\n }\n}\n\n/**\n * Validate if the supplied filter:\n * - has a valid filter defintion\n * - has a valid field definition (if it references a fieldId)\n * - has a valid operator (if present)\n */\nexport function validateFilter({\n filter,\n filterDefinitions,\n fieldDefinitions,\n operatorDefinitions,\n}: {\n filter: SearchFilter\n filterDefinitions: SearchFilterDefinitionDictionary\n fieldDefinitions: SearchFieldDefinitionDictionary\n operatorDefinitions: SearchOperatorDefinitionDictionary\n}): boolean {\n const filterDef = getFilterDefinition(filterDefinitions, filter.filterName)\n const operatorDef = getOperatorDefinition(operatorDefinitions, filter.operatorType)\n const fieldDef = getFieldFromFilter(fieldDefinitions, filter)\n\n // Fail: No matching filter definition\n if (!filterDef) {\n return false\n }\n\n // Fail: No matching operator\n if (!operatorDef) {\n return false\n }\n\n // Fail: No matching field definition\n if (filter.fieldId) {\n if (!fieldDef) {\n return false\n }\n }\n\n // Field filters:\n if (filterDef.type === 'field') {\n // Fail: field definition has invalid path\n if (!fieldDef?.fieldPath) {\n return false\n }\n // Fail: no field ID\n if (!filter.fieldId) {\n return false\n }\n // Fail: no filter value\n const hasFilterValue = operatorDef.groqFilter({\n fieldPath: fieldDef.fieldPath,\n value: filter.value,\n })\n if (!hasFilterValue) {\n return false\n }\n }\n\n // Pinned filters:\n if (filterDef.type === 'pinned') {\n // Fail: no filter value\n const hasFilterValue = operatorDef.groqFilter({\n fieldPath: filterDef.fieldPath,\n value: filter.value,\n })\n if (!hasFilterValue) {\n return false\n }\n }\n\n return true\n}\n","import {Card, Flex, useGlobalKeyDown, useLayer} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {POPOVER_INPUT_PADDING, POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\n\ninterface FilterPopoverWrapperProps {\n anchorElement?: HTMLElement | null\n children?: ReactNode\n onClose: () => void\n}\n\nconst isEscape = isHotkey('escape')\n\nconst MAX_HEIGHT = 500 // px\n\nconst HiddenOverlay = styled.div`\n background: transparent;\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: -1;\n`\n\nexport function FilterPopoverWrapper({\n anchorElement,\n children,\n onClose,\n}: FilterPopoverWrapperProps) {\n const {isTopLayer} = useLayer()\n\n const handleGlobalKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (isEscape(event) && isTopLayer) {\n onClose()\n }\n },\n [isTopLayer, onClose],\n )\n\n useGlobalKeyDown(handleGlobalKeyDown)\n\n const popoverOffset = usePopoverOffset(anchorElement || null)\n\n return (\n <>\n <HiddenOverlay onClick={onClose} />\n <FocusLock autoFocus={false} returnFocus>\n <Card\n display=\"flex\"\n overflow=\"hidden\"\n radius={POPOVER_RADIUS}\n style={{\n maxHeight: `min(calc(100vh - ${popoverOffset}px - ${POPOVER_VERTICAL_MARGIN}px - ${POPOVER_INPUT_PADDING}px), ${MAX_HEIGHT}px`,\n zIndex: 1,\n }}\n >\n <Flex>{children}</Flex>\n </Card>\n </FocusLock>\n </>\n )\n}\n\nfunction calcPopoverOffset(element: HTMLElement) {\n const rect = element.getBoundingClientRect()\n const offset = rect.y + rect.height + POPOVER_VERTICAL_MARGIN\n return offset\n}\n\nfunction usePopoverOffset(element: HTMLElement | null) {\n const [offset, setOffset] = useState<number | null>(element && calcPopoverOffset(element))\n\n const handleWindowResize = useCallback(() => {\n if (element) {\n setOffset(calcPopoverOffset(element))\n }\n }, [element])\n\n useEffect(() => {\n if (element) {\n // oxlint-disable-next-line react/react-compiler\n setOffset(calcPopoverOffset(element))\n }\n }, [element])\n\n useEffect(() => {\n window.addEventListener('resize', handleWindowResize)\n return () => window.removeEventListener('resize', handleWindowResize)\n }, [handleWindowResize])\n\n return offset\n}\n","import {SearchIcon} from '@sanity/icons/Search'\nimport {Box, Flex} from '@sanity/ui'\nimport {type ChangeEvent, type RefAttributes} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {CustomTextInput} from '../../common/CustomTextInput'\n\ninterface FilterPopoverContentHeaderProps {\n ariaInputLabel: string\n onChange: (e: ChangeEvent<HTMLInputElement>) => void\n onClear: () => void\n typeFilter: string\n}\n\nconst SearchHeaderBox = styled(Box)`\n border-bottom: 1px solid\n ${({theme}) => theme.sanity.color.base.border /* oxlint-disable-line no-deprecated -- will fix in follow up PR */};\n flex-shrink: 0;\n`\n\nconst SearchHeaderContentFlex = styled(Flex)`\n box-sizing: border-box;\n`\n\nexport function FilterPopoverContentHeader({\n ref,\n ariaInputLabel,\n onChange,\n onClear,\n typeFilter,\n}: FilterPopoverContentHeaderProps & RefAttributes<HTMLInputElement>) {\n const {\n state: {fullscreen},\n } = useSearchState()\n const {t} = useTranslation()\n\n return (\n <SearchHeaderBox>\n <SearchHeaderContentFlex align=\"center\" flex={1} padding={1}>\n <CustomTextInput\n __unstable_disableFocusRing\n $smallClearButton\n aria-label={ariaInputLabel}\n autoComplete=\"off\"\n border={false}\n clearButton={!!typeFilter}\n fontSize={fullscreen ? 2 : 1}\n icon={SearchIcon}\n muted\n onChange={onChange}\n onClear={onClear}\n placeholder={t('search.filter-placeholder')}\n ref={ref}\n spellCheck={false}\n radius={2}\n value={typeFilter}\n />\n </SearchHeaderContentFlex>\n </SearchHeaderBox>\n )\n}\n","import {type Schema, type SchemaType} from '@sanity/types'\nimport {type ButtonTone} from '@sanity/ui'\nimport difference from 'lodash-es/difference.js'\nimport startCase from 'lodash-es/startCase.js'\n\nimport {type TFunction} from '../../../../../../../i18n/types'\nimport {isNonNullable} from '../../../../../../../util/isNonNullable'\nimport {\n type SearchFieldDefinition,\n type SearchFieldDefinitionDictionary,\n} from '../../../definitions/fields'\nimport {\n getFilterDefinition,\n type SearchFilterDefinition,\n type SearchFilterDefinitionDictionary,\n type SearchFilterPinnedDefinition,\n} from '../../../definitions/filters'\nimport {\n type FilterMenuItem,\n type FilterMenuItemFilter,\n type FilterMenuItemHeader,\n type SearchFilter,\n} from '../../../types'\nimport {buildSearchFilter, getFieldFromFilter} from '../../../utils/filterUtils'\n\n/**\n * Creates a flat list of filter menu items based on the current filter text input.\n */\nexport function createFilterMenuItems({\n documentTypesNarrowed,\n fieldDefinitions,\n filterDefinitions,\n schema,\n titleFilter,\n types,\n t,\n}: {\n documentTypesNarrowed: string[]\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n schema: Schema\n titleFilter: string\n types: SchemaType[]\n t: TFunction<'studio'>\n}): FilterMenuItem[] {\n // Construct field filters based on available definitions and current title fitler\n const fieldFilters = Object.values(fieldDefinitions)\n .filter((fieldDef) => includesTitleInFieldDefinition(fieldDef, titleFilter))\n .map((fieldDef) => {\n const filterDef = getFilterDefinition(filterDefinitions, fieldDef.filterName)\n if (filterDef) {\n return buildSearchFilter(filterDef, fieldDef.id)\n }\n return null\n })\n .filter(isNonNullable)\n\n const pinnedItems = buildPinnedMenuItems({\n fieldDefinitions,\n filterDefinitions,\n titleFilter,\n })\n\n if (documentTypesNarrowed.length === 0) {\n return [\n ...pinnedItems,\n // All fields\n ...filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: fieldFilters,\n headerTitle: t('search.filter-all-fields-header'),\n id: 'field',\n }),\n ]\n }\n\n return [\n ...pinnedItems,\n // All shared / narrowed items\n ...buildFieldMenuItemsNarrowed({\n documentTypesNarrowed,\n fieldDefinitions,\n filterDefinitions,\n filters: fieldFilters,\n schema,\n types,\n t,\n }),\n ]\n}\n\nfunction filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters,\n id,\n headerTitle,\n tone,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n filters: SearchFilter[]\n id: string\n headerTitle?: string\n tone?: ButtonTone\n}): FilterMenuItem[] {\n const header: FilterMenuItemHeader = {\n title: headerTitle || '',\n tone: tone || 'default',\n type: 'header',\n }\n const filterItems = filters.map(\n (filter) =>\n ({\n fieldDefinition: getFieldFromFilter(fieldDefinitions, filter),\n filterDefinition: getFilterDefinition(filterDefinitions, filter.filterName),\n filter,\n group: id,\n tone: tone || 'default',\n type: 'filter',\n }) as FilterMenuItemFilter,\n )\n\n return filterItems.length > 0\n ? [\n ...(headerTitle ? [header] : []), //\n ...filterItems,\n ]\n : []\n}\n\n/**\n * Construct a flat list of narrowed field menu items, including shared fields.\n * Shared fields should always appear first.\n */\nfunction buildFieldMenuItemsNarrowed({\n documentTypesNarrowed,\n fieldDefinitions,\n filterDefinitions,\n filters,\n schema,\n types,\n t,\n}: {\n documentTypesNarrowed: string[]\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n filters: SearchFilter[]\n schema: Schema\n types: SchemaType[]\n t: TFunction<'studio'>\n}) {\n const sharedFilters = filters.filter((filter) => {\n const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n return sharesDocumentTypes(documentTypesNarrowed, fieldDefinition)\n })\n\n const sharedItems =\n documentTypesNarrowed.length > 1 && types.length > 1\n ? filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: sharedFilters,\n headerTitle: t('search.filter-shared-fields-header'),\n id: 'shared',\n tone: 'primary',\n })\n : []\n\n const groupedItems = documentTypesNarrowed\n .map((documentType) => {\n const docType = schema.get(documentType)\n return {\n // Note: it shouldn't be possible to select document types that do not exist in schema,\n // and there is no way to inject it into state (eg not persisted in URL), thus we leave\n // this fallback (`Unknown type`) only as a edge-case safety net and will not translate it.\n title: docType?.title || startCase(docType?.name) || '(Unknown type)',\n documentType,\n }\n })\n // Sort groups by title\n .sort((a, b) => a.title.localeCompare(b.title))\n .flatMap(({documentType, title}) => {\n const groupFilters = filters.filter((filter) => {\n const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n return includesDocumentTypes([documentType], fieldDefinition)\n })\n return filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: groupFilters,\n id: title,\n headerTitle: title,\n })\n })\n\n return [...sharedItems, ...groupedItems]\n}\n\n/**\n * Construct a flat list of all pinned filter menu items (both ungrouped and grouped).\n * Un-grouped items should always appear first.\n */\nfunction buildPinnedMenuItems({\n fieldDefinitions,\n filterDefinitions,\n titleFilter,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n titleFilter: string\n}) {\n // Extract all ungrouped pinned filters, these sit above all other items.\n const ungroupedPinnedFilters = Object.values(filterDefinitions)\n .filter(isPinnedFilterDefWithoutGroup)\n .filter((filterDef) => includesTitleInPinnedFilterDefinition(filterDef, titleFilter))\n .map((filterDef) => buildSearchFilter(filterDef))\n\n // Extract grouped pinned filters\n const groupedPinnedFilters = Object.values(filterDefinitions)\n .filter(isPinnedFilterDefWithGroup)\n .filter((filterDef) => includesTitleInPinnedFilterDefinition(filterDef, titleFilter))\n .reduce<Record<string, SearchFilter[]>>((acc, val) => {\n acc[val.group] = acc[val.group] || []\n acc[val.group].push(buildSearchFilter(val))\n return acc\n }, {})\n\n return [\n // Ungrouped\n ...filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: ungroupedPinnedFilters,\n id: 'pinned-ungrouped',\n tone: 'primary',\n }),\n // Grouped\n ...Object.entries(groupedPinnedFilters).flatMap(([groupTitle, filters]) =>\n filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters,\n headerTitle: groupTitle,\n id: groupTitle,\n tone: 'primary',\n }),\n ),\n ]\n}\n\nfunction includesDocumentTypes(documentTypes: string[], fieldDefinition?: SearchFieldDefinition) {\n return fieldDefinition?.documentTypes.some((type) => documentTypes.includes(type))\n}\n\nfunction includesTitleInFieldDefinition(field: SearchFieldDefinition, currentTitle: string) {\n const fieldTitle = field.titlePath.join('/')\n return fieldTitle.toLowerCase().includes(currentTitle.toLowerCase())\n}\n\nfunction includesTitleInPinnedFilterDefinition(\n filter: SearchFilterPinnedDefinition,\n currentTitle: string,\n) {\n return filter.title.toLowerCase().includes(currentTitle.toLowerCase())\n}\n\nfunction isPinnedFilterDefWithGroup(\n filterDef: SearchFilterDefinition,\n): filterDef is SearchFilterPinnedDefinition & {group: string} {\n return filterDef.type === 'pinned' && typeof filterDef?.group !== 'undefined'\n}\n\nfunction isPinnedFilterDefWithoutGroup(\n filterDef: SearchFilterDefinition,\n): filterDef is SearchFilterPinnedDefinition {\n return filterDef.type === 'pinned' && typeof filterDef?.group === 'undefined'\n}\n\nfunction sharesDocumentTypes(documentTypes: string[], fieldDefinition?: SearchFieldDefinition) {\n return difference(documentTypes, fieldDefinition?.documentTypes || []).length === 0\n}\n","import {useMemo} from 'react'\n\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../definitions/filters'\nimport {type SearchFilter} from '../../types'\nimport {getFieldFromFilter} from '../../utils/filterUtils'\n\ninterface FilterTitleProps {\n filter: SearchFilter\n maxLength?: number\n}\n\nexport function FilterTitle({filter, maxLength}: FilterTitleProps) {\n const {\n state: {definitions},\n } = useSearchState()\n\n const title = useMemo(() => {\n const filterDef = getFilterDefinition(definitions.filters, filter.filterName)\n switch (filterDef?.type) {\n case 'field': {\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n if (fieldDefinition?.titlePath) {\n return fieldDefinition.titlePath[fieldDefinition.titlePath.length - 1]\n }\n return null\n }\n case 'pinned':\n return filterDef.title\n default:\n return null\n }\n }, [definitions, filter])\n\n if (!title) {\n return null\n }\n\n return maxLength && title.length > maxLength ? (\n <span>{title.slice(0, maxLength)}…</span>\n ) : (\n <span>{title}</span>\n )\n}\n","import {UnknownIcon} from '@sanity/icons/Unknown'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {type SearchFilter} from '../../../types'\n\ninterface FilterIconProps {\n filter: SearchFilter\n}\n\nexport function FilterIcon({filter}: FilterIconProps) {\n const {\n state: {definitions},\n } = useSearchState()\n\n const Icon = getFilterDefinition(definitions.filters, filter.filterName)?.icon\n if (Icon) {\n return <Icon />\n }\n return <UnknownIcon />\n}\n","import {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {Fragment} from 'react'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter} from '../../../utils/filterUtils'\nimport {FilterTitle} from '../../common/FilterTitle'\nimport {FilterIcon} from './FilterIcon'\n\ninterface FilterDetailsProps {\n filter: SearchFilter\n}\n\nexport function FilterDetails({filter}: FilterDetailsProps) {\n const {\n state: {definitions},\n } = useSearchState()\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n\n return (\n <Stack gap={2}>\n {/* Path */}\n {fieldDefinition?.titlePath && fieldDefinition.titlePath?.length > 1 && (\n <Box marginLeft={4}>\n <Text muted size={0}>\n {fieldDefinition.titlePath.slice(0, -1).map((pathTitle, index) => {\n return (\n <Fragment\n // oxlint-disable-next-line no-array-index-key\n key={index}\n >\n <span>{pathTitle}</span>\n {index !== fieldDefinition.titlePath.length - 2 && (\n <span\n style={{\n opacity: 0.75,\n paddingLeft: '0.25em',\n paddingRight: '0.25em',\n }}\n >\n <ChevronRightIcon />\n </span>\n )}\n </Fragment>\n )\n })}\n </Text>\n </Box>\n )}\n\n <Flex align=\"flex-start\" gap={3}>\n <Box style={{flexShrink: 0}}>\n <Text size={1}>\n <FilterIcon filter={filter} />\n </Text>\n </Box>\n <Text size={1} weight=\"medium\">\n <FilterTitle filter={filter} />\n </Text>\n </Flex>\n </Stack>\n )\n}\n","import {isValidElement} from 'react'\nimport {renderToString} from 'react-dom/server'\n\n/**\n * Convert a field value to a string (if it's a React element) and remove HTML tags.\n * If the field value is a string, pass through as-is.\n */\nexport function sanitizeFieldValue(name: string | React.JSX.Element): string {\n if (isValidElement(name)) {\n try {\n return stripHtmlTags(renderToString(name))\n } catch (err) {\n console.warn(\n 'A field title or description contains a React component that could not be rendered. ' +\n 'This is likely caused by a component that requires runtime context. ' +\n 'Use a string or JSX containing HTML elements only.',\n err,\n )\n return ''\n }\n }\n\n return typeof name === 'string' ? name : ''\n}\n\nfunction stripHtmlTags(str: string) {\n return new DOMParser().parseFromString(str, 'text/html')?.body.textContent || ''\n}\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\nimport startCase from 'lodash-es/startCase.js'\nimport uniq from 'lodash-es/uniq.js'\n\nimport {Tooltip} from '../../../../../../../../../ui-components/tooltip/Tooltip'\nimport {TextWithTone} from '../../../../../../../../components/textWithTone/TextWithTone'\nimport {useSchema} from '../../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../../i18n/hooks/useTranslation'\nimport {EMPTY_ARRAY} from '../../../../../../../../util/empty'\nimport {isNonNullable} from '../../../../../../../../util/isNonNullable'\nimport {truncateString} from '../../../../../../../../util/unicodeString'\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\nimport {type SearchFieldDefinition} from '../../../../definitions/fields'\nimport {type SearchFilterDefinition} from '../../../../definitions/filters'\nimport {getSchemaField} from '../../../../utils/getSchemaField'\nimport {sanitizeFieldValue} from '../../../../utils/sanitizeField'\n\ninterface FilterTooltipProps {\n children: React.JSX.Element\n fieldDefinition?: SearchFieldDefinition\n filterDefinition: SearchFilterDefinition\n visible?: boolean\n}\n\nconst MAX_VISIBLE_TYPES = 10\n\nexport function FilterTooltip({\n children,\n fieldDefinition,\n filterDefinition,\n visible,\n}: FilterTooltipProps) {\n const {\n state: {documentTypesNarrowed},\n } = useSearchState()\n const {t} = useTranslation()\n\n const schema = useSchema()\n\n const fieldDefinitionDocumentTypeTitles = fieldDefinition?.documentTypes\n ? fieldDefinition.documentTypes\n .map((d) => {\n const defType = schema.get(d)\n return defType?.title || startCase(defType?.name)\n })\n .filter(isNonNullable)\n .sort()\n : EMPTY_ARRAY\n\n /**\n * Obtain the shared field description for the current field definition.\n * Return a description only if this field description is identical (and defined)\n * across all ALL associated fields.\n */\n let fieldDefinitionDescription: string | undefined\n if (fieldDefinition?.documentTypes) {\n const descriptions = fieldDefinition.documentTypes\n .map((d) => {\n const defType = schema.get(d)\n if (defType) {\n const field = getSchemaField(defType, fieldDefinition.fieldPath)\n // Sanitize schema descriptions (which may either be a string or React element)\n return field?.type.description && sanitizeFieldValue(field?.type.description)\n }\n return null\n })\n .filter(isNonNullable)\n .sort()\n\n const uniqueDescriptions = uniq(descriptions)\n if (uniqueDescriptions.length === 1) {\n fieldDefinitionDescription = uniqueDescriptions[0]\n }\n }\n\n return (\n <Tooltip\n content={\n <Card tone=\"default\" radius={2} style={{maxWidth: '250px'}}>\n <Stack gap={4}>\n {/* Field name */}\n {fieldDefinition && (\n <Stack gap={3}>\n <Text muted size={1} weight=\"medium\">\n {t('search.filter-field-tooltip-name')}\n </Text>\n <TextWithTone\n size={1}\n style={{fontFamily: 'monospace'}}\n tone=\"primary\"\n textOverflow=\"ellipsis\"\n >\n {fieldDefinition?.name}\n </TextWithTone>\n </Stack>\n )}\n\n {/* Field description */}\n {fieldDefinitionDescription && (\n <Stack gap={3}>\n <Text muted size={1} weight=\"medium\">\n {t('search.filter-field-tooltip-description')}\n </Text>\n <Text muted size={1}>\n {truncateString(fieldDefinitionDescription, 256)}\n </Text>\n </Stack>\n )}\n\n {/* Filter description */}\n {filterDefinition?.description && (\n <Text muted size={1}>\n {truncateString(filterDefinition.description, 256)}\n </Text>\n )}\n\n {/* Field document titles */}\n {!documentTypesNarrowed.length && fieldDefinitionDocumentTypeTitles.length > 0 && (\n <Stack gap={2}>\n <Flex align=\"center\" gap={1}>\n <Text muted size={1} weight=\"medium\">\n {t('search.filter-field-tooltip-used-in-document-types')}\n </Text>\n <Card padding={1} radius={2} tone=\"transparent\">\n <Text size={1} muted>\n {fieldDefinitionDocumentTypeTitles.length}\n </Text>\n </Card>\n </Flex>\n <Text size={1} weight=\"regular\" muted>\n {fieldDefinitionDocumentTypeTitles.slice(0, MAX_VISIBLE_TYPES).join(', ')}\n {fieldDefinitionDocumentTypeTitles?.length > MAX_VISIBLE_TYPES\n ? ` +${fieldDefinitionDocumentTypeTitles.length - MAX_VISIBLE_TYPES} more`\n : ''}\n </Text>\n </Stack>\n )}\n </Stack>\n </Card>\n }\n disabled={!visible}\n fallbackPlacements={['left']}\n placement=\"right\"\n portal\n >\n {children}\n </Tooltip>\n )\n}\n","import {\n Box,\n // oxlint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children.\n type ResponsiveMarginProps,\n type ResponsivePaddingProps,\n} from '@sanity/ui'\nimport {memo, useCallback} from 'react'\n\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\nimport {type FilterMenuItemFilter} from '../../../../types'\nimport {getFilterKey} from '../../../../utils/filterUtils'\nimport {FilterDetails} from '../../common/FilterDetails'\nimport {FilterTooltip} from './FilterTooltip'\n\ninterface FilterMenuItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n item: FilterMenuItemFilter\n onClose: () => void\n}\n\nexport const MenuItemFilter = memo(function MenuItemFilter({\n item,\n onClose,\n ...rest\n}: FilterMenuItemProps) {\n const {\n dispatch,\n state: {filters},\n } = useSearchState()\n\n const handleClick = useCallback(() => {\n dispatch({filter: item.filter, type: 'TERMS_FILTERS_ADD'})\n onClose?.()\n }, [dispatch, item.filter, onClose])\n\n const isAlreadyActive = !!filters.find((f) => getFilterKey(f) === getFilterKey(item.filter))\n\n // Only enable tooltips if an associated field definition exists, or the filter has a valid description\n const tooltipEnabled = !!(item.fieldDefinition || item.filterDefinition.description)\n\n return (\n <Box {...rest}>\n <Button\n disabled={isAlreadyActive}\n fontSize={1}\n justify=\"flex-start\"\n mode=\"bleed\"\n onClick={isAlreadyActive ? undefined : handleClick}\n padding={0}\n style={{position: 'relative', whiteSpace: 'normal', width: '100%'}}\n tabIndex={-1}\n tone={item?.tone}\n >\n <FilterTooltip\n fieldDefinition={item.fieldDefinition}\n filterDefinition={item.filterDefinition}\n visible={tooltipEnabled}\n >\n <Box padding={3}>\n <FilterDetails filter={item.filter} />\n </Box>\n </FilterTooltip>\n </Button>\n </Box>\n )\n})\n","import {Box, Card, Text} from '@sanity/ui'\nimport {memo} from 'react'\n\nimport {type FilterMenuItemHeader} from '../../../../types'\n\ninterface MenuItemHeaderFields {\n item: FilterMenuItemHeader\n}\n\nexport const MenuItemHeader = memo(function MenuItemHeader({item}: MenuItemHeaderFields) {\n return (\n <Box paddingTop={1}>\n <Card borderBottom paddingX={2} paddingY={3} tone={item?.tone}>\n <Text muted size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n {item.title}\n </Text>\n </Card>\n </Box>\n )\n})\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useMemo, useState} from 'react'\n\nimport {CommandList} from '../../../../../../../components/commandList/CommandList'\nimport {\n type CommandListGetItemDisabledCallback,\n type CommandListRenderItemCallback,\n} from '../../../../../../../components/commandList/types'\nimport {useSchema} from '../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type FilterMenuItem} from '../../../types'\nimport {getFilterKey} from '../../../utils/filterUtils'\nimport {FilterPopoverContentHeader} from '../common/FilterPopoverContentHeader'\nimport {createFilterMenuItems} from './createFilterMenuItems'\nimport {MenuItemFilter} from './items/MenuItemFilter'\nimport {MenuItemHeader} from './items/MenuItemHeader'\n\ninterface AddFilterPopoverContentProps {\n onClose: () => void\n}\n\nconst POPOVER_STYLES = {width: '300px'}\n\nexport function AddFilterPopoverContent({onClose}: AddFilterPopoverContentProps) {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n const [titleFilter, setTitleFilter] = useState('')\n const {t} = useTranslation()\n\n const handleFilterChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => setTitleFilter(e.currentTarget.value),\n [setTitleFilter],\n )\n const handleFilterClear = useCallback(() => setTitleFilter(''), [])\n\n const schema = useSchema()\n\n const {\n state: {\n documentTypesNarrowed,\n definitions,\n filters,\n terms: {types},\n },\n } = useSearchState()\n\n const filteredMenuItems = useMemo(\n () =>\n createFilterMenuItems({\n documentTypesNarrowed,\n fieldDefinitions: definitions.fields,\n filterDefinitions: definitions.filters,\n schema,\n titleFilter,\n types,\n t,\n }),\n [documentTypesNarrowed, definitions.fields, definitions.filters, schema, titleFilter, types, t],\n )\n\n const renderItem = useCallback<CommandListRenderItemCallback<FilterMenuItem>>(\n (item) => {\n if (item.type === 'filter') {\n return <MenuItemFilter item={item} onClose={onClose} paddingBottom={1} />\n }\n if (item.type === 'header') {\n return <MenuItemHeader item={item} />\n }\n return null\n },\n [onClose],\n )\n\n const getItemDisabled = useCallback<CommandListGetItemDisabledCallback>(\n (index) => {\n const filterItem = filteredMenuItems[index]\n return (\n filterItem.type !== 'filter' ||\n !!filters.find((f) => getFilterKey(f) === getFilterKey(filterItem.filter))\n )\n },\n [filteredMenuItems, filters],\n )\n\n const getItemKey = useCallback(\n (index: number) => {\n const menuItem = filteredMenuItems[index]\n switch (menuItem.type) {\n case 'filter':\n return [\n ...(menuItem.group ? [menuItem.group] : []), //\n getFilterKey(menuItem.filter),\n ].join('-')\n case 'header':\n return `${menuItem.type}-${menuItem.title}`\n default:\n return index\n }\n },\n [filteredMenuItems],\n )\n\n return (\n <Flex direction=\"column\" style={POPOVER_STYLES}>\n {/* Filter header */}\n <FilterPopoverContentHeader\n ariaInputLabel={t('search.filter-by-title-aria-label')}\n onChange={handleFilterChange}\n onClear={handleFilterClear}\n ref={setInputElement}\n typeFilter={titleFilter}\n />\n\n <Flex>\n {filteredMenuItems.length > 0 && (\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.filters-aria-label', {count: filteredMenuItems.length})}\n autoFocus=\"input\"\n getItemDisabled={getItemDisabled}\n getItemKey={getItemKey}\n inputElement={inputElement}\n itemHeight={45}\n items={filteredMenuItems}\n overscan={20}\n padding={1}\n paddingBottom={0}\n renderItem={renderItem}\n />\n )}\n\n {/* No results */}\n {filteredMenuItems.length == 0 && (\n <Box padding={3}>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {t('search.filter-no-matches-found', {filter: titleFilter})}\n </Text>\n </Box>\n )}\n </Flex>\n </Flex>\n )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {Popover} from '../../../../../../../../ui-components/popover/Popover'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {AddFilterPopoverContent} from './AddFilterPopoverContent'\n\nexport function AddFilterButton() {\n const [open, setOpen] = useState(false)\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const {t} = useTranslation()\n\n const {\n state: {fullscreen},\n } = useSearchState()\n\n const handleClose = useCallback(() => setOpen(false), [])\n const handleOpen = useCallback(() => setOpen(true), [])\n\n useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n return (\n <Popover\n __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n content={\n <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n <AddFilterPopoverContent onClose={handleClose} />\n </FilterPopoverWrapper>\n }\n open={open}\n placement=\"bottom-start\"\n radius={POPOVER_RADIUS}\n ref={popoverRef}\n portal\n >\n <Button\n icon={AddIcon}\n mode=\"bleed\"\n onClick={handleOpen}\n size={fullscreen ? 'large' : 'default'}\n ref={setButtonElement}\n selected={open}\n text={t('search.action.add-filter')}\n />\n </Popover>\n )\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\n\nexport function DebugDocumentTypesNarrowed() {\n const {\n state: {documentTypesNarrowed},\n } = useSearchState()\n\n return (\n <Card borderTop padding={4} tone=\"transparent\">\n <Stack gap={3}>\n <Code size={1} weight=\"medium\">\n Document types (narrowed)\n </Code>\n <Code size={1} style={{whiteSpace: 'normal'}}>\n {documentTypesNarrowed.length > 0 ? documentTypesNarrowed.join(', ') : '(All)'}\n </Code>\n </Stack>\n </Card>\n )\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\n\nexport function DebugFilterQuery() {\n const {\n state: {\n terms: {filter},\n },\n } = useSearchState()\n\n if (!filter) {\n return null\n }\n\n return (\n <Card padding={4} tone=\"transparent\">\n <Stack gap={3}>\n <Code size={1} weight=\"medium\">\n Filter\n </Code>\n {filter && (\n <Code size={1} style={{whiteSpace: 'normal'}}>\n {filter}\n </Code>\n )}\n </Stack>\n </Card>\n )\n}\n","import {CheckmarkIcon} from '@sanity/icons/Checkmark'\nimport {type SchemaType} from '@sanity/types'\nimport {Box, type ResponsiveMarginProps, type ResponsivePaddingProps} from '@sanity/ui'\nimport {memo, useCallback} from 'react'\n\nimport {Button} from '../../../../../../../../../ui-components/button/Button'\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\n\ninterface DocumentTypeFilterItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n selected: boolean\n type: SchemaType\n}\n\nexport const DocumentTypeFilterItem = memo(function TypeFilterItem({\n selected,\n type,\n ...rest\n}: DocumentTypeFilterItemProps) {\n const {dispatch} = useSearchState()\n\n const handleTypeAdd = useCallback(() => {\n dispatch({type: 'TERMS_TYPE_ADD', schemaType: type})\n }, [dispatch, type])\n\n const handleTypeRemove = useCallback(() => {\n dispatch({type: 'TERMS_TYPE_REMOVE', schemaType: type})\n }, [dispatch, type])\n\n const handleClick = useCallback(() => {\n if (selected) {\n handleTypeRemove()\n } else {\n handleTypeAdd()\n }\n }, [handleTypeAdd, handleTypeRemove, selected])\n\n return (\n <Box {...rest}>\n <Button\n key={type.title ?? type.name}\n iconRight={selected && CheckmarkIcon}\n justify=\"flex-start\"\n mode=\"bleed\"\n onClick={handleClick}\n width=\"fill\"\n size=\"large\"\n tabIndex={-1}\n text={type.title ?? type.name}\n tone={selected ? 'primary' : 'default'}\n />\n </Box>\n )\n})\n","import {type Schema, type SchemaType} from '@sanity/types'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {MenuDivider} from '@sanity/ui/menu'\nimport partition from 'lodash-es/partition.js'\nimport {type ChangeEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {CommandList} from '../../../../../../../components/commandList/CommandList'\nimport {\n type CommandListGetItemSelectedCallback,\n type CommandListHandle,\n type CommandListRenderItemCallback,\n} from '../../../../../../../components/commandList/types'\nimport {useSchema} from '../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type DocumentTypeMenuItem} from '../../../types'\nimport {getSelectableOmnisearchTypes} from '../../../utils/selectors'\nimport {FilterPopoverContentHeader} from '../common/FilterPopoverContentHeader'\nimport {DocumentTypeFilterItem} from './items/DocumentTypeFilterItem'\n\nconst ClearButtonBox = styled(Box)`\n border-top: 1px solid\n ${({theme}) => theme.sanity.color.base.border /* oxlint-disable-line no-deprecated -- will fix in follow up PR */};\n flex-shrink: 0;\n`\n\nconst POPOVER_STYLES = {width: '250px'}\n\nexport function DocumentTypesPopoverContent() {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n const [typeFilter, setTypeFilter] = useState('')\n const commandListRef = useRef<CommandListHandle | null>(null)\n const {t} = useTranslation()\n\n const schema = useSchema()\n\n const {\n dispatch,\n state: {\n terms: {types: selectedTypes},\n },\n } = useSearchState()\n\n // Get a snapshot of initial selected types\n const [selectedTypesSnapshot, setSelectedTypesSnapshot] = useState(selectedTypes)\n\n const documentTypeItems = useGetDocumentTypeItems(\n schema,\n selectedTypes,\n selectedTypesSnapshot,\n typeFilter,\n )\n\n const handleFilterChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => setTypeFilter(e.currentTarget.value),\n [setTypeFilter],\n )\n const handleFilterClear = useCallback(() => setTypeFilter(''), [])\n\n const handleTypesClear = useCallback(() => {\n setSelectedTypesSnapshot([])\n dispatch({type: 'TERMS_TYPES_CLEAR'})\n\n // Re-focus the command list input element\n commandListRef?.current?.focusInputElement()\n commandListRef?.current?.scrollToIndex(0)\n }, [dispatch])\n\n const getItemKey = useCallback(\n (index: number) => {\n const virtualItem = documentTypeItems[index]\n switch (virtualItem.type) {\n case 'divider':\n return `${virtualItem.type}-${index}`\n case 'header':\n return `${virtualItem.type}-${virtualItem.title}`\n case 'item':\n return `${virtualItem.type}-${virtualItem.item.name}`\n default:\n return index\n }\n },\n [documentTypeItems],\n )\n\n const renderItem = useCallback<CommandListRenderItemCallback<DocumentTypeMenuItem>>((item) => {\n if (item.type === 'divider') {\n return (\n <Box paddingY={1}>\n <MenuDivider />\n </Box>\n )\n }\n if (item.type === 'header') {\n return (\n <Box margin={2} padding={1}>\n <Text muted size={1} weight=\"medium\">\n {item.title}\n </Text>\n </Box>\n )\n }\n if (item.type === 'item') {\n return <DocumentTypeFilterItem paddingBottom={1} selected={item.selected} type={item.item} />\n }\n return null\n }, [])\n\n const getItemDisabled = useCallback<CommandListGetItemSelectedCallback>(\n (index) => {\n const item = documentTypeItems[index]\n return item.type !== 'item'\n },\n [documentTypeItems],\n )\n\n const getItemSelected = useCallback<CommandListGetItemSelectedCallback>(\n (index) => {\n const item = documentTypeItems[index]\n return item.type === 'item' && item.selected\n },\n [documentTypeItems],\n )\n\n return (\n <Flex direction=\"column\" style={POPOVER_STYLES}>\n {/* Search header */}\n <FilterPopoverContentHeader\n ariaInputLabel={t('search.action.filter-by-document-type-aria-label')}\n onChange={handleFilterChange}\n onClear={handleFilterClear}\n ref={setInputElement}\n typeFilter={typeFilter}\n />\n\n <Flex>\n {documentTypeItems.length > 0 && (\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.document-types-aria-label')}\n ariaMultiselectable\n autoFocus=\"input\"\n getItemDisabled={getItemDisabled}\n getItemSelected={getItemSelected}\n getItemKey={getItemKey}\n inputElement={inputElement}\n itemHeight={37}\n items={documentTypeItems}\n overscan={20}\n padding={1}\n paddingBottom={0}\n ref={commandListRef}\n renderItem={renderItem}\n />\n )}\n\n {/* No results */}\n {!documentTypeItems.length && (\n <Box padding={3}>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {t('search.document-types-no-matches-found', {filter: typeFilter})}\n </Text>\n </Box>\n )}\n </Flex>\n\n {/* Clear button */}\n {!typeFilter && selectedTypes.length > 0 && (\n <ClearButton onClick={handleTypesClear} selectedTypes={selectedTypes} />\n )}\n </Flex>\n )\n}\n\nfunction ClearButton({onClick, selectedTypes}: {onClick: () => void; selectedTypes: SchemaType[]}) {\n const {t} = useTranslation()\n\n return (\n <ClearButtonBox padding={1}>\n <Stack>\n <Button\n aria-label={t('search.action.clear-type-filters-aria-label')}\n data-name=\"type-filter-button\"\n disabled={selectedTypes.length === 0}\n mode=\"bleed\"\n onClick={onClick}\n text={t('search.action.clear-type-filters-label')}\n tone=\"primary\"\n />\n </Stack>\n </ClearButtonBox>\n )\n}\n\nfunction useGetDocumentTypeItems(\n schema: Schema,\n selectedTypes: SchemaType[],\n selectedTypesSnapshot: SchemaType[],\n typeFilter: string,\n) {\n return useMemo(() => {\n const [itemsSelected, itemsUnselected] = partition(\n getSelectableOmnisearchTypes(schema, typeFilter),\n (type) => selectedTypesSnapshot.includes(type),\n )\n\n const hasSelectedItems = itemsSelected.length > 0\n const hasUnselectedItems = itemsSelected.length > 0\n\n const items: DocumentTypeMenuItem[] = []\n if (hasSelectedItems) {\n items.push({title: 'Selected', type: 'header'})\n }\n itemsSelected.forEach((item) =>\n items.push({item, selected: selectedTypes.includes(item), type: 'item'}),\n )\n if (hasSelectedItems && hasUnselectedItems) {\n items.push({type: 'divider'})\n }\n itemsUnselected.forEach((item) =>\n items.push({item, selected: selectedTypes.includes(item), type: 'item'}),\n )\n\n return items\n }, [schema, selectedTypes, selectedTypesSnapshot, typeFilter])\n}\n","import {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {type Placement, useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {Popover} from '../../../../../../../../ui-components/popover/Popover'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {documentTypesTruncated} from '../../../utils/documentTypesTruncated'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {DocumentTypesPopoverContent} from './DocumentTypesPopoverContent'\n\nconst FALLBACK_PLACEMENTS: Placement[] = ['top-start', 'bottom-start']\n\nexport function DocumentTypesButton() {\n const [open, setOpen] = useState(false)\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const {\n state: {\n fullscreen,\n terms: {types},\n },\n } = useSearchState()\n const {t} = useTranslation()\n\n const handleClose = useCallback(() => setOpen(false), [])\n const handleOpen = useCallback(() => setOpen(true), [])\n\n useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n const title = useMemo(() => documentTypesTruncated({types, t}), [types, t])\n\n return (\n <Popover\n __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n content={\n <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n <DocumentTypesPopoverContent />\n </FilterPopoverWrapper>\n }\n open={open}\n placement=\"bottom-start\"\n fallbackPlacements={FALLBACK_PLACEMENTS}\n portal\n radius={POPOVER_RADIUS}\n ref={popoverRef}\n >\n <Button\n iconRight={ChevronDownIcon}\n mode=\"ghost\"\n onClick={handleOpen}\n size={fullscreen ? 'large' : 'default'}\n ref={setButtonElement}\n selected={open}\n text={title}\n tone=\"default\"\n />\n </Popover>\n )\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {TextWithTone} from '../../../../../../components/textWithTone/TextWithTone'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {Translate, type TranslateComponentMap} from '../../../../../../i18n/Translate'\nimport {type TFunction} from '../../../../../../i18n/types'\nimport {isRecord} from '../../../../../../util/isRecord'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getOperatorDefinition} from '../../definitions/operators'\nimport {type SearchFilter, type SearchFilterValues} from '../../types'\nimport {FilterTitle} from './FilterTitle'\n\ninterface FilterLabelProps {\n filter: SearchFilter\n fontSize?: number\n showContent?: boolean\n}\n\nconst CustomBox = styled(Box)<{$flexShrink?: number}>`\n flex-shrink: ${({$flexShrink = 0}) => $flexShrink};\n`\n\nexport function FilterLabel({filter, fontSize = 1, showContent = true}: FilterLabelProps) {\n const {t} = useTranslation()\n const {\n state: {definitions, fullscreen},\n } = useSearchState()\n\n const operator = getOperatorDefinition(definitions.operators, filter.operatorType)\n\n const ButtonValue = operator?.buttonValueComponent\n const filterValue = filter.value\n\n const components: TranslateComponentMap = useMemo(\n () => ({\n Field: () => (\n <CustomBox $flexShrink={fullscreen ? 1 : 0}>\n <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n <FilterTitle filter={filter} maxLength={fullscreen ? 25 : 40} />\n </TextWithTone>\n </CustomBox>\n ),\n Operator: ({children}) =>\n showContent ? (\n <CustomBox $flexShrink={0}>\n <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"regular\">\n {children}\n </TextWithTone>\n </CustomBox>\n ) : null,\n Value: ({children}) =>\n showContent ? (\n <CustomBox $flexShrink={1}>\n <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {ButtonValue ? <ButtonValue value={filterValue} /> : children}\n </TextWithTone>\n </CustomBox>\n ) : null,\n }),\n [filter, fontSize, fullscreen, showContent, ButtonValue, filterValue],\n )\n\n if (!operator?.descriptionKey) {\n console.warn('Missing `descriptionKey` for operator `%s`', filter.operatorType)\n }\n\n if (!showContent || !operator?.descriptionKey) {\n const Field = components.Field\n return (\n <Flex align=\"center\" gap={1}>\n <Field />\n </Flex>\n )\n }\n\n return (\n <Flex align=\"center\" gap={1}>\n <Translate\n t={t}\n i18nKey={operator?.descriptionKey}\n components={components}\n values={getFilterValues(filter, t)}\n />\n </Flex>\n )\n}\n\nfunction getFilterValues(filter: SearchFilter, t: TFunction): SearchFilterValues {\n const values: SearchFilterValues = {}\n if (typeof filter.value === 'number') {\n values.count = filter.value\n }\n if (isStringOrNumber(filter.value)) {\n values.value = filter.value\n }\n if (typeof filter.value === 'boolean') {\n // Cast boolean into a string value\n values.value = filter.value ? t('search.filter-boolean-true') : t('search.filter-boolean-false')\n }\n if (isRecord(filter.value) && 'from' in filter.value && isStringOrNumber(filter.value.from)) {\n values.from = filter.value.from\n }\n if (isRecord(filter.value) && 'to' in filter.value && isStringOrNumber(filter.value.to)) {\n values.to = filter.value.to\n }\n return values\n}\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number'\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter} from '../../../utils/filterUtils'\n\ninterface DebugDocumentTypesProps {\n filter: SearchFilter\n}\n\nexport function DebugDocumentTypes({filter}: DebugDocumentTypesProps) {\n const {\n state: {\n definitions: {fields},\n },\n } = useSearchState()\n const fieldDefinition = getFieldFromFilter(fields, filter)\n\n return (\n <Card borderTop padding={3} tone=\"transparent\">\n <Stack gap={2}>\n <Code size={0} weight=\"medium\">\n Document types\n </Code>\n <Code size={0} style={{whiteSpace: 'normal'}}>\n {fieldDefinition?.documentTypes && fieldDefinition.documentTypes.length > 0\n ? fieldDefinition.documentTypes?.join(', ')\n : '(all)'}\n </Code>\n </Stack>\n </Card>\n )\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter} from '../../../utils/filterUtils'\n\ninterface DebugFilterValuesProps {\n filter: SearchFilter\n}\n\nexport function DebugFilterValues({filter}: DebugFilterValuesProps) {\n const {\n state: {definitions},\n } = useSearchState()\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n\n return (\n <Card borderTop padding={3} tone=\"transparent\">\n <Stack gap={2}>\n <Code size={0} weight=\"medium\">\n Filter\n </Code>\n {fieldDefinition?.fieldPath && <Code size={0}>fieldPath: {fieldDefinition.fieldPath}</Code>}\n <Code size={0} style={{whiteSpace: 'normal'}}>\n filterName: {filter.filterName}\n </Code>\n <Code size={0} style={{whiteSpace: 'normal'}}>\n operatorType: {filter.operatorType}\n </Code>\n <Code size={0} style={{whiteSpace: 'normal'}}>\n value: {typeof filter?.value === 'undefined' ? '' : JSON.stringify(filter.value)}\n </Code>\n </Stack>\n </Card>\n )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Flex, type ResponsivePaddingProps, Stack} from '@sanity/ui'\n\nimport {TextWithTone} from '../../../../../../../components/textWithTone/TextWithTone'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\n\nexport function FilterError(props: ResponsivePaddingProps) {\n const {t} = useTranslation()\n\n return (\n <Box {...props}>\n <Flex align=\"flex-start\" gap={3}>\n <TextWithTone tone=\"critical\">\n <ErrorOutlineIcon />\n </TextWithTone>\n <Stack gap={4}>\n <TextWithTone size={1} tone=\"critical\" weight=\"medium\">\n {t('search.error.display-filter-title')}\n </TextWithTone>\n <TextWithTone size={1} tone=\"critical\">\n {t('search.error.display-filter-description')}\n </TextWithTone>\n </Stack>\n </Flex>\n </Box>\n )\n}\n","import {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {Inline} from '@sanity/ui'\nimport {Menu, MenuDivider} from '@sanity/ui/menu'\nimport {useCallback, useId} from 'react'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {MenuButton} from '../../../../../../../../ui-components/menuButton/MenuButton'\nimport {MenuItem} from '../../../../../../../../ui-components/menuItem/MenuItem'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {getOperatorDefinition, type SearchOperatorDefinition} from '../../../definitions/operators'\nimport {type SearchFilter} from '../../../types'\nimport {getFilterKey} from '../../../utils/filterUtils'\n\ninterface OperatorsMenuButtonProps {\n filter: SearchFilter\n operator?: SearchOperatorDefinition\n}\n\nfunction CustomMenuItem({\n onClick,\n operator,\n selected,\n}: {\n onClick: (operatorType: string) => void\n operator: SearchOperatorDefinition\n selected: boolean\n}) {\n const handleClick = useCallback(() => onClick(operator.type), [onClick, operator.type])\n const {t} = useTranslation()\n\n return (\n <MenuItem\n onClick={handleClick}\n pressed={selected}\n tone=\"default\"\n text={t(operator.nameKey)}\n iconRight={operator?.icon}\n />\n )\n}\n\nexport function OperatorsMenuButton({filter, operator}: OperatorsMenuButtonProps) {\n const menuButtonId = useId()\n\n const {t} = useTranslation()\n const {dispatch, state} = useSearchState()\n const operatorItems = getFilterDefinition(state.definitions.filters, filter.filterName)?.operators\n\n const handleClick = useCallback(\n (operatorType: string) => {\n dispatch({\n filterKey: getFilterKey(filter),\n operatorType,\n type: 'TERMS_FILTERS_SET_OPERATOR',\n })\n },\n [dispatch, filter],\n )\n\n if (!operator || !operatorItems || operatorItems.length <= 1) {\n return null\n }\n\n return (\n <Inline>\n <MenuButton\n button={<Button mode=\"ghost\" iconRight={ChevronDownIcon} text={t(operator.nameKey)} />}\n id={menuButtonId || ''}\n menu={\n <Menu>\n {operatorItems.map((item, index) => {\n if (item.type === 'item') {\n const menuOperator = getOperatorDefinition(state.definitions.operators, item.name)\n if (!menuOperator) {\n return null\n }\n return (\n <CustomMenuItem\n // oxlint-disable-next-line no-array-index-key\n key={index}\n onClick={handleClick}\n operator={menuOperator}\n selected={operator.type === item.name}\n />\n )\n }\n if (item.type === 'divider') {\n // oxlint-disable-next-line no-array-index-key\n return <MenuDivider key={index} />\n }\n return null\n })}\n </Menu>\n }\n popover={{\n placement: 'bottom-start',\n constrainSize: true,\n portal: false,\n radius: 2,\n }}\n />\n </Inline>\n )\n}\n","import {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {type ErrorInfo, useCallback, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {ErrorBoundary} from '../../../../../../../../ui-components/errorBoundary/ErrorBoundary'\nimport {supportsTouch} from '../../../../../../../util/supportsTouch'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {getOperatorDefinition} from '../../../definitions/operators'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter, getFilterKey} from '../../../utils/filterUtils'\nimport {FilterDetails} from '../common/FilterDetails'\nimport {FilterError} from './FilterError'\nimport {OperatorsMenuButton} from './OperatorsMenuButton'\n\ninterface FilterFormProps {\n filter: SearchFilter\n}\n\ninterface ErrorParams {\n error: Error\n info: ErrorInfo\n}\n\nexport function FilterForm({filter}: FilterFormProps) {\n const [errorParams, setErrorParams] = useState<ErrorParams | null>(null)\n const {\n dispatch,\n state: {definitions, fullscreen},\n } = useSearchState()\n\n const filterDefinition = getFilterDefinition(definitions.filters, filter.filterName)\n const operator = getOperatorDefinition(definitions.operators, filter.operatorType)\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n const filterKey = getFilterKey(filter)\n\n const handleClose = useCallback(() => {\n dispatch({\n filterKey: getFilterKey(filter),\n type: 'TERMS_FILTERS_REMOVE',\n })\n }, [dispatch, filter])\n\n const handleValueChange = useCallback(\n (value: any) => {\n dispatch({\n filterKey: filterKey,\n type: 'TERMS_FILTERS_SET_VALUE',\n value,\n })\n },\n [dispatch, filterKey],\n )\n\n const handleCatchError = useCallback((params: ErrorParams) => {\n setErrorParams(params)\n }, [])\n\n const Component = operator?.inputComponent\n\n if (errorParams) {\n return <FilterError padding={4} />\n }\n\n // Flex order is reversed to ensure form inputs are focusable first\n return (\n <ErrorBoundary onCatch={handleCatchError}>\n <FocusLock autoFocus={!supportsTouch} returnFocus>\n <Flex direction=\"column-reverse\">\n {/* Value */}\n {Component && (\n <Card borderTop padding={3}>\n <Component\n // re-render on new operators\n key={filter.operatorType}\n fieldDefinition={fieldDefinition}\n onChange={handleValueChange}\n value={filter.value}\n />\n </Card>\n )}\n\n {/* Title, description and operator */}\n <Card padding={3}>\n <Stack gap={3}>\n <Flex align=\"flex-start\" gap={3} justify=\"space-between\">\n <Box paddingLeft={1} paddingRight={2} paddingY={1}>\n <FilterDetails filter={filter} />\n </Box>\n\n {fullscreen && (\n <Button\n icon={TrashIcon}\n mode=\"bleed\"\n onClick={handleClose}\n tone=\"critical\"\n tooltipProps={{content: 'Remove filter'}}\n />\n )}\n </Flex>\n {filterDefinition?.description && (\n <Card border padding={3} radius={2} tone=\"transparent\">\n <Text muted size={1}>\n {filterDefinition.description}\n </Text>\n </Card>\n )}\n <OperatorsMenuButton filter={filter} operator={operator} />\n </Stack>\n </Card>\n </Flex>\n </FocusLock>\n </ErrorBoundary>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {DEBUG_MODE} from '../../../constants'\nimport {type SearchFilter} from '../../../types'\nimport {DebugDocumentTypes} from '../debug/_DebugDocumentTypes'\nimport {DebugFilterValues} from '../debug/_DebugFilterValues'\nimport {FilterForm} from './FilterForm'\n\ninterface FilterPopoverContentProps {\n filter: SearchFilter\n}\n\nconst ContainerFlex = styled(Flex)`\n max-width: 480px;\n min-width: 150px;\n overflow: hidden;\n overflow: clip;\n width: 100%;\n`\n\nexport function FilterPopoverContent({filter}: FilterPopoverContentProps) {\n return (\n <ContainerFlex direction=\"column\">\n <FilterForm filter={filter} />\n\n {/* Debug panels */}\n {DEBUG_MODE && (\n <>\n <DebugFilterValues filter={filter} />\n <DebugDocumentTypes filter={filter} />\n </>\n )}\n </ContainerFlex>\n )\n}\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {\n // oxlint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children behavior.\n Card,\n rem,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {type KeyboardEvent, useCallback, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../../../ui-components/popover/Popover'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFilterKey, validateFilter} from '../../../utils/filterUtils'\nimport {FilterLabel} from '../../common/FilterLabel'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {FilterPopoverContent} from './FilterPopoverContent'\n\ninterface FilterButtonProps {\n filter: SearchFilter\n initialOpen?: boolean\n}\n\nconst CloseButton = styled(Button)`\n border-radius: ${({theme}) =>\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n `0 ${rem(theme.sanity.radius[2])} ${rem(theme.sanity.radius[2])} 0`};\n`\n\nconst CloseCard = styled(Card)`\n position: absolute;\n right: 0;\n`\n\nconst ContainerDiv = styled.div`\n align-items: center;\n display: inline-flex;\n max-width: 100%;\n position: relative;\n`\n\nconst LabelButton = styled(Button)`\n border: none;\n width: 100%;\n`\n\nexport function FilterButton({filter, initialOpen}: FilterButtonProps) {\n const [open, setOpen] = useState(initialOpen)\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const {\n dispatch,\n state: {definitions, fullscreen},\n } = useSearchState()\n\n const {t} = useTranslation()\n\n const handleClose = useCallback(() => setOpen(false), [])\n const handleOpen = useCallback(() => setOpen(true), [])\n const handleRemove = useCallback(\n () =>\n dispatch({\n filterKey: getFilterKey(filter),\n type: 'TERMS_FILTERS_REMOVE',\n }),\n [dispatch, filter],\n )\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n if (['Backspace', 'Delete'].includes(event.key)) {\n handleRemove()\n }\n },\n [handleRemove],\n )\n\n useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n const isValid = validateFilter({\n fieldDefinitions: definitions.fields,\n filter,\n filterDefinitions: definitions.filters,\n operatorDefinitions: definitions.operators,\n })\n\n return (\n <Popover\n __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n content={\n <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n <FilterPopoverContent filter={filter} />\n </FilterPopoverWrapper>\n }\n constrainSize\n open={open}\n overflow=\"auto\"\n placement=\"bottom-start\"\n portal\n radius={POPOVER_RADIUS}\n ref={popoverRef}\n >\n <ContainerDiv>\n <Card\n __unstable_focusRing\n display=\"flex\"\n radius={2}\n tone={isValid ? 'primary' : 'transparent'}\n >\n <LabelButton\n mode=\"bleed\"\n onClick={handleOpen}\n onKeyDown={handleKeyDown}\n paddingLeft={fullscreen ? 3 : 2}\n paddingRight={fullscreen ? 3 : 5}\n paddingY={fullscreen ? 3 : 2}\n ref={setButtonElement}\n >\n <FilterLabel filter={filter} showContent={isValid} />\n </LabelButton>\n </Card>\n\n {!fullscreen && (\n <CloseCard\n __unstable_focusRing\n display=\"flex\"\n radius={2}\n tone={isValid ? 'primary' : 'transparent'}\n >\n <CloseButton\n aria-label={t('search.action.remove-filter-aria-label')}\n fontSize={1}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={handleRemove}\n onKeyDown={handleKeyDown}\n padding={2}\n radius={2}\n />\n </CloseCard>\n )}\n </ContainerDiv>\n </Popover>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {Button} from '../../../../../../../ui-components/button/Button'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {DEBUG_MODE} from '../../constants'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getFilterKey} from '../../utils/filterUtils'\nimport {AddFilterButton} from './addFilter/AddFilterButton'\nimport {DebugDocumentTypesNarrowed} from './debug/_DebugDocumentTypesNarrowed'\nimport {DebugFilterQuery} from './debug/_DebugFilterQuery'\nimport {DocumentTypesButton} from './documentTypes/DocumentTypesButton'\nimport {FilterButton} from './filter/FilterButton'\n\n/**\n * @internal\n */\nexport function Filters({showTypeFilter = true}: {showTypeFilter?: boolean}) {\n const {\n dispatch,\n state: {\n filters,\n fullscreen,\n lastAddedFilter,\n terms: {types},\n },\n } = useSearchState()\n const {t} = useTranslation()\n\n const [isMounted, setIsMounted] = useState(false)\n\n const handleClear = useCallback(() => {\n if (showTypeFilter) dispatch({type: 'TERMS_TYPES_CLEAR'})\n dispatch({type: 'TERMS_FILTERS_CLEAR'})\n }, [dispatch, showTypeFilter])\n\n const clearFiltersButtonVisible = filters.length > 0 || (showTypeFilter && types.length > 0)\n\n useEffect(() => {\n // oxlint-disable-next-line react/react-compiler\n setIsMounted(true)\n }, [])\n\n const lastAddedFilterKey = lastAddedFilter && getFilterKey(lastAddedFilter)\n\n const clearFiltersButton = (\n <Button\n mode=\"bleed\"\n onClick={handleClear}\n size={fullscreen ? 'large' : 'default'}\n text={t('search.action.clear-filters')}\n tone=\"critical\"\n />\n )\n\n return (\n <>\n <Flex align=\"flex-start\" gap={3} justify=\"space-between\" padding={2}>\n <Flex flex={1} gap={2} wrap=\"wrap\">\n {showTypeFilter && <DocumentTypesButton />}\n {filters?.map((filter) => {\n const key = getFilterKey(filter)\n return (\n <FilterButton\n key={key}\n filter={filter}\n initialOpen={isMounted && lastAddedFilterKey === key}\n />\n )\n })}\n {!fullscreen && <AddFilterButton />}\n </Flex>\n {clearFiltersButtonVisible && !fullscreen && clearFiltersButton}\n </Flex>\n\n {fullscreen && (\n <Flex justify=\"space-between\" paddingBottom={2} paddingX={2}>\n <AddFilterButton />\n {clearFiltersButtonVisible && clearFiltersButton}\n </Flex>\n )}\n\n {/* Debug panels */}\n {DEBUG_MODE && (\n <>\n <DebugFilterQuery />\n <DebugDocumentTypesNarrowed />\n </>\n )}\n </>\n )\n}\n","import {ArrowLeftIcon} from '@sanity/icons/ArrowLeft'\nimport {ControlsIcon} from '@sanity/icons/Controls'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\nimport {Box, Card, Flex} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useEffect, useRef, type RefAttributes} from 'react'\nimport {keyframes, styled} from 'styled-components'\n\nimport {Button} from '../../../../../../ui-components/button/Button'\nimport {StatusButton} from '../../../../../components/StatusButton'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {CustomTextInput} from './common/CustomTextInput'\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst AnimatedSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nconst FilterDiv = styled.div`\n line-height: 0;\n position: relative;\n`\n\ninterface SearchHeaderProps {\n ariaInputLabel?: string\n onClose?: () => void\n}\n\n/**\n * @internal\n */\nexport function SearchHeader({\n ref,\n ariaInputLabel,\n onClose,\n}: SearchHeaderProps & RefAttributes<HTMLInputElement>) {\n const isMountedRef = useRef(false)\n\n const {t} = useTranslation()\n const {\n dispatch,\n state: {\n filters,\n filtersVisible,\n fullscreen,\n result: {loading},\n terms,\n },\n } = useSearchState()\n const {types, query} = terms\n\n const hasValidTerms = hasSearchableTerms({terms})\n const ariaLabel =\n ariaInputLabel || hasValidTerms\n ? t('search.search-results-aria-label')\n : t('search.recent-searches-aria-label')\n\n const handleFiltersToggle = useCallback(\n () => dispatch({type: 'FILTERS_VISIBLE_SET', visible: !filtersVisible}),\n [dispatch, filtersVisible],\n )\n const handleQueryChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) =>\n dispatch({type: 'TERMS_QUERY_SET', query: e.currentTarget.value}),\n [dispatch],\n )\n const handleQueryClear = useCallback(() => {\n dispatch({type: 'TERMS_QUERY_SET', query: ''})\n }, [dispatch])\n\n /**\n * Always show filters on non-fullscreen mode\n */\n useEffect(() => {\n if (!fullscreen) {\n dispatch({type: 'FILTERS_VISIBLE_SET', visible: true})\n }\n }, [dispatch, fullscreen])\n\n useEffect(() => {\n isMountedRef.current = true\n }, [])\n\n const notificationBadgeVisible = filters.length > 0 || types.length > 0\n\n return (\n <Card flex=\"none\">\n <Flex align=\"center\" flex={1} gap={fullscreen ? 2 : 1} padding={fullscreen ? 2 : 1}>\n {/* (Fullscreen) Close button */}\n {fullscreen && (\n <Button\n aria-label={t('search.action.close-search-aria-label')}\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n onClick={onClose}\n size=\"large\"\n tooltipProps={{content: t('search.action.close-search-aria-label')}}\n />\n )}\n\n {/* Search field */}\n <Box flex={1}>\n <CustomTextInput\n __unstable_disableFocusRing\n $background={fullscreen}\n $smallClearButton={fullscreen}\n aria-label={ariaLabel}\n autoComplete=\"off\"\n border={false}\n clearButton={!!query}\n fontSize={[2, 2, 1]}\n icon={loading ? AnimatedSpinnerIcon : SearchIcon}\n onChange={handleQueryChange}\n onClear={handleQueryClear}\n placeholder={t('search.placeholder')}\n radius={2}\n ref={ref}\n spellCheck={false}\n value={query}\n />\n </Box>\n\n {/* Filter toggle */}\n {fullscreen && (\n <FilterDiv>\n <StatusButton\n aria-expanded={filtersVisible}\n aria-label={t('search.action.toggle-filters-aria-label', {\n context: filtersVisible ? 'hide' : 'show',\n })}\n icon={ControlsIcon}\n mode=\"bleed\"\n onClick={handleFiltersToggle}\n selected={filtersVisible}\n size=\"large\"\n tone={notificationBadgeVisible ? 'primary' : undefined}\n tooltipProps={{\n content: t('search.action.toggle-filters-label', {\n context: filtersVisible ? 'hide' : 'show',\n }),\n }}\n />\n </FilterDiv>\n )}\n </Flex>\n </Card>\n )\n}\n","import {useGlobalKeyDown, useLayer} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {useCallback} from 'react'\n\nimport {GLOBAL_SEARCH_KEY} from '../constants'\n\nconst isSearchHotKey = isHotkey(`mod+${GLOBAL_SEARCH_KEY}`)\nconst isEscape = isHotkey('escape')\n\n/**\n * This hook binds a global shortcut combination, as well as the ESC key, to open / close callbacks.\n *\n * It will prevent the ESC key from firing `onClose` callbacks if it's not the top most layer\n * (i.e. if a nested dialog is mounted).\n */\nexport function useSearchHotkeys({\n open,\n onClose,\n onOpen,\n}: {\n open: boolean\n onClose?: () => void\n onOpen?: () => void\n}): void {\n const {isTopLayer} = useLayer()\n\n const handleClose = useCallback(() => {\n onClose?.()\n }, [onClose])\n\n const handleGlobalKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (isSearchHotKey(event)) {\n event.preventDefault()\n if (open) {\n handleClose()\n } else {\n onOpen?.()\n }\n }\n if (isEscape(event) && open && isTopLayer) {\n handleClose()\n }\n },\n [handleClose, isTopLayer, open, onOpen],\n )\n\n useGlobalKeyDown(handleGlobalKeyDown)\n}\n","import {type ReactNode, useCallback, useEffect, useRef} from 'react'\n\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {useSearchHotkeys} from '../../hooks/useSearchHotkeys'\n\ninterface SearchWrapperProps {\n children: ReactNode\n hasValidTerms: boolean\n onClose: () => void\n onOpen?: () => void\n open: boolean\n}\n\nexport function SearchWrapper({\n children,\n hasValidTerms,\n onClose,\n onOpen,\n open,\n}: SearchWrapperProps) {\n const isMountedRef = useRef(false)\n\n const {\n dispatch,\n searchCommandList,\n setOnClose,\n state: {result},\n } = useSearchState()\n\n /**\n * Store top-most search result scroll index on close\n */\n const handleClose = useCallback(() => {\n dispatch({index: searchCommandList?.getTopIndex() ?? -1, type: 'LAST_ACTIVE_INDEX_SET'})\n onClose()\n }, [dispatch, onClose, searchCommandList])\n\n /**\n * Bind hotkeys to open action\n */\n useSearchHotkeys({onClose: handleClose, onOpen, open})\n\n /**\n * Set shared `onClose` in search context\n */\n useEffect(() => {\n /**\n * When using useState you have to use the function callback version of setState,\n * otherwise it'll call your function and set the state to whatever your function return.\n */\n setOnClose(() => handleClose)\n }, [handleClose, setOnClose])\n\n /**\n * Reset last search index when new results are loaded, or visiting recent searches\n */\n // @todo Revise if/when we introduce pagination\n useEffect(() => {\n if ((!hasValidTerms || result.loaded) && isMountedRef.current) {\n dispatch({index: 0, type: 'LAST_ACTIVE_INDEX_SET'})\n }\n }, [dispatch, hasValidTerms, result.loaded])\n\n /**\n * Reset ordering when is closed (without valid search terms)\n */\n useEffect(() => {\n if (!hasValidTerms && isMountedRef.current && !open) {\n dispatch({type: 'ORDERING_RESET'})\n }\n }, [dispatch, hasValidTerms, open])\n\n /**\n * Store mounted state\n */\n useEffect(() => {\n if (!isMountedRef?.current) {\n isMountedRef.current = true\n }\n }, [])\n\n return children\n}\n","import {\n type ArrayDefinition,\n type ObjectDefinition,\n type Schema,\n type SchemaTypeDefinition,\n type StringDefinition,\n} from '@sanity/types'\nimport startCase from 'lodash-es/startCase.js'\n\nimport {sanitizeFieldValue} from '../utils/sanitizeField'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {getSupportedFieldTypes, type SearchFilterDefinition} from './filters'\n\nexport const MAX_OBJECT_TRAVERSAL_DEPTH = 3\n\n/**\n * @internal\n */\nexport interface SearchFieldDefinition {\n documentTypes: string[]\n fieldPath: string\n filterName: string\n id: string\n name: string\n title: string\n titlePath: string[]\n type: string\n}\n\n/**\n * @internal\n */\nexport type SearchFieldDefinitionDictionary = Record<\n SearchFieldDefinition['id'],\n SearchFieldDefinition\n>\n\nexport function createFieldDefinitions(\n schema: Schema,\n filterDefinitions: SearchFilterDefinition[],\n): SearchFieldDefinition[] {\n // Get allowed document types (`__experimental_omnisearch_visibility !== false`)\n const searchableDocumentTypeNames = getSearchableOmnisearchTypes(schema).map((s) => s.name)\n\n // Get user-defined schema types, partitioned into documents and objects\n const {documentTypes, objectTypes} = (schema._original?.types || [])\n .filter((t) => {\n // Ignore document types hidden by omnisearch\n const isNotTypeNotIgnored = isDocumentObjectDefinition(t)\n ? searchableDocumentTypeNames.includes(t.name)\n : true\n\n return (\n isNotTypeNotIgnored &&\n // Ignore the 'slug' object to prevent surfacing 'current' and (deprecated) 'source field' fields.\n t.name !== 'slug' &&\n // Ignore sanity documents and assets\n !t.name.startsWith('sanity.')\n )\n })\n // Partition\n .reduce<{\n documentTypes: Record<string, ObjectDefinition>\n objectTypes: Record<string, ObjectDefinition>\n }>(\n (acc, schemaType) => {\n if (isDocumentObjectDefinition(schemaType)) {\n acc.documentTypes[schemaType.name] = schemaType\n }\n if (isObjectDefinition(schemaType)) {\n acc.objectTypes[schemaType.name] = schemaType\n }\n return acc\n },\n {documentTypes: {}, objectTypes: {}},\n ) || {documentTypes: {}, objectTypes: {}}\n\n // Get supported filter field types that have corresponding filters defined\n const supportedFieldTypes = getSupportedFieldTypes(filterDefinitions)\n\n return getDocumentFieldDefinitions(supportedFieldTypes, documentTypes, objectTypes)\n}\n\nexport function createFieldDefinitionDictionary(\n fieldDefinitions: SearchFieldDefinition[],\n): SearchFieldDefinitionDictionary {\n return fieldDefinitions.reduce<SearchFieldDefinitionDictionary>((acc, val) => {\n acc[val.id] = val\n return acc\n }, {})\n}\n\nexport function generateFieldId(field: SearchFieldDefinition): string {\n return [field.type, field.fieldPath, field.title].join('-')\n}\n\nfunction getDocumentFieldDefinitions(\n supportedFieldTypes: string[],\n documentTypes: Record<string, ObjectDefinition>,\n objectTypes: Record<string, ObjectDefinition>,\n) {\n const supportedFieldTypeSet = new Set<string>(supportedFieldTypes)\n\n // Recursively iterate through all documents and resolve objects\n function addFieldDefinitionRecursive({\n acc,\n defType,\n depth = 0,\n documentType,\n prevFieldPath,\n prevTitlePath,\n }: {\n acc: SearchFieldDefinition[]\n defType: SchemaTypeDefinition\n depth?: number\n documentType: string\n prevFieldPath?: string\n prevTitlePath?: string[]\n }) {\n if (depth > MAX_OBJECT_TRAVERSAL_DEPTH) {\n return\n }\n\n const isInternalField = defType.name.startsWith('_')\n // Sanitize schema titles (which may either be a string or React element)\n const title = defType?.title ? sanitizeFieldValue(defType.title) : startCase(defType.name)\n const fieldPath = prevFieldPath ? `${prevFieldPath}.${defType.name}` : defType.name\n const titlePath = prevTitlePath ? [...prevTitlePath, title] : [title]\n\n // Map to an existing document, object or inline object if found\n const existingObject = objectTypes[defType.type]\n const existingDocument = documentTypes[defType.type]\n const inlineObject = isObjectDefinition(defType) ? defType : null\n const targetObject = existingDocument || existingObject || inlineObject\n\n if (targetObject) {\n for (const field of targetObject.fields ?? []) {\n addFieldDefinitionRecursive({\n acc,\n defType: field as ObjectDefinition,\n depth: depth + 1,\n documentType,\n prevFieldPath: fieldPath,\n prevTitlePath: titlePath,\n })\n }\n return\n }\n\n // Return if the current field type doesn't have a corresponding filter\n if (!supportedFieldTypeSet.has(defType.type)) return\n\n acc.push({\n documentTypes: documentType && !isInternalField ? [documentType] : [],\n fieldPath,\n filterName: resolveFilterName(defType),\n id: '',\n name: defType.name,\n titlePath,\n title,\n type: defType.type,\n })\n }\n\n const fieldDefinitions: Array<SearchFieldDefinition> = []\n\n for (const documentType of Object.values(documentTypes)) {\n const documentFields: Array<SearchFieldDefinition> = []\n\n for (const documentField of (documentType.fields ?? []) as Array<ObjectDefinition>) {\n addFieldDefinitionRecursive({\n acc: documentFields,\n defType: documentField,\n documentType: documentType.name,\n })\n }\n\n fieldDefinitions.push(...documentFields.map(addFieldDefinitionId))\n }\n\n const consolidatedFieldDefinitionMap = new Map<string, SearchFieldDefinition>()\n for (const fieldDefinitionWithId of fieldDefinitions) {\n const consolidated = consolidatedFieldDefinitionMap.get(fieldDefinitionWithId.id)\n\n if (consolidated) {\n consolidated.documentTypes.push(...fieldDefinitionWithId.documentTypes)\n continue\n }\n\n consolidatedFieldDefinitionMap.set(fieldDefinitionWithId.id, fieldDefinitionWithId)\n }\n\n const consolidatedFieldDefinitions = Array.from(consolidatedFieldDefinitionMap.values())\n consolidatedFieldDefinitions.sort(sortFieldDefinitions)\n\n return consolidatedFieldDefinitions\n}\n\n/**\n * Create unique ID as a hash from documentTypes, full field path, filter and field types\n */\nfunction addFieldDefinitionId(field: SearchFieldDefinition) {\n return {\n ...field,\n id: generateFieldId(field),\n }\n}\n\nfunction isArrayOfPrimitives(schemaType: SchemaTypeDefinition): schemaType is ArrayDefinition {\n if (isArrayDefinition(schemaType)) {\n return (\n schemaType.of.every((item) => ['boolean', 'number', 'string'].includes(item.type)) &&\n (schemaType.options?.list ? schemaType.options.list.length > 0 : false)\n )\n }\n return false\n}\n\nfunction isArrayDefinition(schemaType: SchemaTypeDefinition): schemaType is ArrayDefinition {\n return schemaType.type === 'array'\n}\n\nfunction isDocumentObjectDefinition(\n schemaType: SchemaTypeDefinition,\n): schemaType is ObjectDefinition {\n return schemaType.type === 'document'\n}\n\nfunction isObjectDefinition(schemaType: SchemaTypeDefinition): schemaType is ObjectDefinition {\n return schemaType.type === 'object'\n}\n\nfunction isStringDefinition(schemaType: SchemaTypeDefinition): schemaType is StringDefinition {\n return schemaType.type === 'string'\n}\n\nfunction isStringListDefinition(schemaType: SchemaTypeDefinition): schemaType is StringDefinition {\n if (isStringDefinition(schemaType)) {\n return schemaType.options?.list ? schemaType.options.list.length > 0 : false\n }\n return false\n}\n\nfunction resolveFilterName(schemaType: SchemaTypeDefinition) {\n if (isStringListDefinition(schemaType)) {\n return 'stringList'\n }\n if (isArrayDefinition(schemaType)) {\n if (schemaType.of.some((item) => item.type === 'reference')) {\n return 'arrayReferences'\n }\n if (schemaType.of.find((item) => item.type === 'block')) {\n return 'portableText'\n }\n if (isArrayOfPrimitives(schemaType)) {\n return 'arrayList'\n }\n }\n return schemaType.type\n}\n\n/**\n * Sort definitions by title, joined titlePath and fieldPath (in that order)\n */\nfunction sortFieldDefinitions(a: SearchFieldDefinition, b: SearchFieldDefinition): number {\n return (\n a.title.localeCompare(b.title) ||\n a.titlePath.slice(0, -1).join('/').localeCompare(b.titlePath.slice(0, -1).join('/')) ||\n a.fieldPath.localeCompare(b.fieldPath)\n )\n}\n","import {useCallback, useMemo} from 'react'\nimport {useSyncObservable} from 'react-rx'\nimport {merge, Subject} from 'rxjs'\nimport {map, startWith, tap} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {useKeyValueStore} from '../../../../../store/datastores'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\n\nexport const RECENT_SEARCH_VERSION = 3\nconst STORED_SEARCHES_NAMESPACE = 'studio.search.recent'\n\nexport interface StoredSearch {\n version: number\n recentSearches: any[]\n}\n\nconst defaultValue: StoredSearch = {\n version: RECENT_SEARCH_VERSION,\n recentSearches: [],\n}\n\nexport function useStoredSearch(): [StoredSearch, (_value: StoredSearch) => void] {\n const keyValueStore = useKeyValueStore()\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const {dataset} = client.config()\n\n const keyValueStoreKey = useMemo(() => `${STORED_SEARCHES_NAMESPACE}.${dataset}`, [dataset])\n\n // Local echo of writes: the store's change events are not delivered to\n // subscribers while getKey's initial fetch is in flight, so without this\n // the UI would wait for the server round-trip (or miss the write entirely)\n // instead of updating immediately.\n const optimisticWrites$ = useMemo(() => new Subject<StoredSearch>(), [])\n\n const value$ = useMemo(\n () =>\n merge(\n keyValueStore.getKey(keyValueStoreKey).pipe(\n // Reset outdated stored versions (per original verifySearchVersionNumber\n // logic) — side effect kept in `tap` so the `map` below stays pure.\n tap((raw) => {\n const data = raw as StoredSearch | null\n if (data && data.version !== RECENT_SEARCH_VERSION) {\n void keyValueStore.setKey(keyValueStoreKey, defaultValue as any)\n }\n }),\n map((raw): StoredSearch => {\n const data = raw as StoredSearch | null\n // Fall back to the default when nothing is stored or the stored\n // version is outdated\n if (!data || data.version !== RECENT_SEARCH_VERSION) {\n return defaultValue\n }\n return data\n }),\n ),\n optimisticWrites$,\n ).pipe(startWith(defaultValue)),\n [keyValueStore, keyValueStoreKey, optimisticWrites$],\n )\n\n // Kept synchronous: callers (recentSearches) rebuild the stored list from\n // this value before writing it back, so a stale deferred snapshot could\n // clobber a concurrent write and drop a recent search.\n const value = useSyncObservable(value$, defaultValue)\n\n const set = useCallback(\n (newValue: StoredSearch) => {\n optimisticWrites$.next(newValue)\n void keyValueStore.setKey(keyValueStoreKey, newValue as any)\n },\n [keyValueStore, keyValueStoreKey, optimisticWrites$],\n )\n\n return useMemo(() => [value, set], [set, value])\n}\n","import {type ObjectSchemaType, type Schema} from '@sanity/types'\nimport isEqual from 'lodash-es/isEqual.js'\nimport omit from 'lodash-es/omit.js'\nimport {useMemo} from 'react'\n\nimport {useSchema} from '../../../../../hooks/useSchema'\nimport {type SearchTerms} from '../../../../../search/common/types'\nimport {useSource} from '../../../../source'\nimport {\n createFieldDefinitionDictionary,\n createFieldDefinitions,\n type SearchFieldDefinitionDictionary,\n} from '../definitions/fields'\nimport {\n createFilterDefinitionDictionary,\n type SearchFilterDefinitionDictionary,\n} from '../definitions/filters'\nimport {\n createOperatorDefinitionDictionary,\n type SearchOperatorDefinitionDictionary,\n} from '../definitions/operators'\nimport {type SearchFilter} from '../types'\nimport {validateFilter} from '../utils/filterUtils'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {useStoredSearch} from './useStoredSearch'\n\nexport const MAX_RECENT_SEARCHES = 5\n/**\n * Current recent search version.\n *\n * Users with recent searches containing mismatching versions will have their recent searches cleared.\n * This value should only be incremented when search filter operator `value` data types are updated,\n * ensuring that users don't have stored recent searches containing invalid operator values.\n *\n * This is a bit of a blunt instrument: in future we could look to validate individual filter values and\n * remove outdated entries individually.\n */\nconst RECENT_SEARCH_VERSION = 3\n\nexport type RecentSearch = SearchTerms & {\n __recent: {\n index: number\n timestamp: number\n }\n filters?: SearchFilter[]\n}\n\nexport interface RecentSearchesStore {\n addSearch: (searchTerm: SearchTerms, filters?: SearchFilter[]) => RecentSearch[]\n getRecentSearches: () => RecentSearch[]\n removeSearch: () => RecentSearch[]\n removeSearchAtIndex: (index: number) => RecentSearch[]\n}\n\ninterface StoredSearch {\n version: number\n recentSearches: StoredSearchItem[]\n}\n\ninterface StoredSearchItem {\n created: string\n filters: SearchFilter[]\n terms: Omit<SearchTerms, 'types'> & {typeNames: string[]}\n}\n\nexport function useRecentSearchesStore(): RecentSearchesStore {\n const [storedSearch, setStoredSearch] = useStoredSearch()\n const schema = useSchema()\n const {\n search: {operators, filters},\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n } = useSource()\n\n // Create field, filter and operator dictionaries\n const {fieldDefinitions, filterDefinitions, operatorDefinitions} = useMemo(() => {\n return {\n fieldDefinitions: createFieldDefinitionDictionary(createFieldDefinitions(schema, filters)),\n filterDefinitions: createFilterDefinitionDictionary(filters),\n operatorDefinitions: createOperatorDefinitionDictionary(operators),\n }\n }, [filters, operators, schema])\n\n return {\n /**\n * Write a search term to Local Storage and return updated recent searches.\n */\n addSearch: (searchTerm: SearchTerms, searchFilters?: SearchFilter[]): RecentSearch[] => {\n const storedFilters = (searchFilters || []).map((filter): SearchFilter => ({\n fieldId: filter.fieldId,\n filterName: filter.filterName,\n operatorType: filter.operatorType,\n value: filter.value,\n }))\n\n // Remove any filters in 'incomplete' states prior to writing to local storage.\n const validStoredFilters = storedFilters.filter((filter) =>\n validateFilter({\n fieldDefinitions,\n filter,\n filterDefinitions,\n operatorDefinitions,\n }),\n )\n\n const newSearchItem: StoredSearchItem = {\n created: new Date().toISOString(),\n filters: validStoredFilters,\n terms: {\n query: searchTerm.query.trim(),\n typeNames: searchTerm.types.map((s) => s.name),\n },\n }\n // Add new search item, remove previous duplicates (if any) and truncate array.\n // When comparing search items, don't compare against the created date (which will always be different).\n const newRecent: StoredSearch = {\n version: RECENT_SEARCH_VERSION,\n recentSearches: [\n newSearchItem,\n ...storedSearch.recentSearches.filter((r) => {\n return !isEqual(omit(r, 'created'), omit(newSearchItem, 'created'))\n }),\n ].slice(0, MAX_RECENT_SEARCHES),\n }\n setStoredSearch(newRecent)\n\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch: newRecent,\n setStoredSearch,\n })\n },\n /**\n * Fetch all recent searches from Local Storage.\n * Invalid search terms will be filtered out and terms will be re-written to Local Storage.\n */\n getRecentSearches: () =>\n getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch,\n setStoredSearch,\n }),\n /**\n * Remove all search terms from Local Storage and return updated recent searches.\n */\n removeSearch: () => {\n const newRecent: StoredSearch = {\n ...storedSearch,\n recentSearches: [],\n }\n\n setStoredSearch(newRecent)\n\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch: newRecent,\n setStoredSearch,\n })\n },\n /**\n * Remove a search term from Local Storage and return updated recent searches.\n */\n removeSearchAtIndex: (index: number) => {\n if (index < 0 || index > storedSearch.recentSearches.length) {\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch,\n setStoredSearch,\n })\n }\n\n const newRecent: StoredSearch = {\n ...storedSearch,\n recentSearches: [\n ...storedSearch.recentSearches.slice(0, index),\n ...storedSearch.recentSearches.slice(index + 1),\n ],\n }\n\n setStoredSearch(newRecent)\n\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch: newRecent,\n setStoredSearch,\n })\n },\n }\n}\n\n/**\n * Get a list of recent searches from Local Storage.\n * Recent searches contain full document schema types.\n */\nfunction getRecentSearchTerms({\n schema,\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n storedSearch,\n setStoredSearch,\n}: {\n schema: Schema\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n operatorDefinitions: SearchOperatorDefinitionDictionary\n storedSearch: StoredSearch\n setStoredSearch: (_value: StoredSearch) => void\n}): RecentSearch[] {\n return sanitizeStoredSearch({\n studioSchema: schema,\n filterDefinitions,\n fieldDefinitions,\n operatorDefinitions,\n storedSearch,\n setStoredSearch,\n })\n .recentSearches.filter((r) => !!r.terms)\n .map((r, index) => ({\n __recent: {\n index,\n timestamp: new Date(r.created).getTime(),\n },\n filters: r.filters,\n query: r.terms.query,\n types: r.terms.typeNames\n .map((typeName) => schema.get(typeName))\n .filter((s): s is ObjectSchemaType => !!(s && s.jsonType === 'object')),\n }))\n}\n\n/**\n * Sanitize stored search.\n *\n * Ignore searches containing:\n * - Any number of invalid document schema types\n * - Document types hidden from omnisearch with __experimental_omnisearch_visibility\n * - Invalid filters\n *\n * This mutates Local Storage if any invalid terms are found.\n */\nfunction sanitizeStoredSearch({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n studioSchema,\n storedSearch,\n setStoredSearch,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n operatorDefinitions: SearchOperatorDefinitionDictionary\n studioSchema: Schema\n storedSearch: StoredSearch\n setStoredSearch: (_value: StoredSearch) => void\n}): StoredSearch {\n // Obtain all 'searchable' type names – defined as a type that exists in\n // the current schema and also visible to omnisearch.\n const searchableTypeNames = getSearchableOmnisearchTypes(studioSchema).map(\n (schema) => schema.name,\n )\n\n const filteredSearch = storedSearch.recentSearches.filter((recentSearch) => {\n return (\n // Has valid searchable types (not hidden by omnisearch)\n recentSearch.terms.typeNames.every((typeName) => searchableTypeNames.includes(typeName)) &&\n recentSearch.filters.every((filter) =>\n validateFilter({fieldDefinitions, filter, filterDefinitions, operatorDefinitions}),\n )\n )\n })\n\n const newStoredSearch: StoredSearch = {\n version: RECENT_SEARCH_VERSION,\n recentSearches: filteredSearch,\n }\n\n if (newStoredSearch.recentSearches.length < storedSearch.recentSearches.length) {\n setStoredSearch(newStoredSearch)\n }\n\n return newStoredSearch\n}\n","import {ControlsIcon} from '@sanity/icons/Controls'\nimport {Flex, Inline, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {Translate} from '../../../../../i18n/Translate'\n\nexport function Instructions() {\n const {t} = useTranslation()\n\n return (\n <Flex align=\"center\" direction=\"column\" gap={4} paddingX={4} paddingY={5}>\n <Inline gap={3}>\n <Text muted>\n <Translate\n t={t}\n i18nKey=\"search.instructions\"\n components={{\n ControlsIcon: () => <ControlsIcon key={0} style={{padding: '0 0.25rem'}} />,\n }}\n />\n </Text>\n </Inline>\n </Flex>\n )\n}\n","import {defineEvent} from '@sanity/telemetry'\n\nexport const RecentSearchClicked = defineEvent({\n name: 'Recent Search Viewed',\n version: 1,\n description: 'User clicked on a recent search item to reapply it',\n})\n\n/**\n * Time from a global navbar search being dispatched (post-debounce) to\n * its results arriving or failing.\n *\n * Timing origin (T0) is the `onStart` callback of the search pipeline,\n * which fires after the 300ms debounce (we want network latency, not\n * the user's typing pause). Timing end (T1) is the `onComplete` or\n * `onError` callback in the same pipeline.\n *\n * Fires only for searches with searchable terms; empty-term \"searches\"\n * (where the pipeline short-circuits to an empty observable) are\n * skipped to avoid noising the metric.\n *\n * Not overlapping with `Document List Load Time Measured`, which\n * measures search within the structure tool's document list. This\n * event covers the global omnisearch only.\n *\n * Sampled at most every 30 seconds to bound the event volume when\n * users type quickly (matches existing `Document Pair Load Time Measured`\n * and `Document List Load Time Measured`).\n */\nexport interface GlobalSearchLatencyMeasuredData {\n /** ms from onStart to onComplete/onError */\n durationMs: number\n queryLength: number\n typeFilterCount: number\n /** number of hits returned (0 when errored) */\n resultCount: number\n /** search strategy from workspace config (e.g. 'text-search', 'groq2024') */\n strategy: string | null\n /** true when the pipeline called onError instead of onComplete */\n errored: boolean\n}\n\nexport const GlobalSearchLatencyMeasured = defineEvent<GlobalSearchLatencyMeasuredData>({\n name: 'Global Search Latency Measured',\n version: 1,\n description:\n 'Time from a global navbar search being dispatched (post-debounce) to ' +\n 'its results arriving or failing.',\n maxSampleRate: 30_000,\n})\n","import {type SchemaType} from '@sanity/types'\nimport {Card, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {documentTypesTruncated} from '../../utils/documentTypesTruncated'\n\ninterface TypePillsProps {\n availableCharacters?: number\n types: SchemaType[]\n}\n\nexport function DocumentTypesPill({availableCharacters, types}: TypePillsProps) {\n const {t} = useTranslation()\n const title = useMemo(\n () => documentTypesTruncated({availableCharacters, types, t}),\n [availableCharacters, types, t],\n )\n\n return (\n <Card border padding={2} radius={2}>\n <Text muted size={1}>\n {title}\n </Text>\n </Card>\n )\n}\n","import {Card} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type SearchFilter} from '../../types'\nimport {FilterLabel} from './FilterLabel'\n\ninterface FilterPillProps {\n filter: SearchFilter\n}\n\nconst FilterPillCard = styled(Card)`\n cursor: default;\n`\n\nexport function FilterPill({filter}: FilterPillProps) {\n return (\n <FilterPillCard border padding={2} radius={2} tone=\"primary\">\n <FilterLabel filter={filter} />\n </FilterPillCard>\n )\n}\n","import {ClockIcon} from '@sanity/icons/Clock'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {\n Box,\n // oxlint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children behavior.\n Flex,\n Inline,\n rem,\n type ResponsiveMarginProps,\n type ResponsivePaddingProps,\n Text,\n} from '@sanity/ui'\nimport {type MouseEvent, useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {RecentSearchClicked} from '../../../__telemetry__/search.telemetry'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type RecentSearch, useRecentSearchesStore} from '../../../datastores/recentSearches'\nimport {DocumentTypesPill} from '../../common/DocumentTypesPill'\nimport {FilterPill} from '../../common/FilterPill'\n\nexport interface RecentSearchesProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n index: number\n maxVisibleTypePillChars?: number\n value: RecentSearch\n}\n\nconst DEFAULT_COMBINED_TYPE_COUNT = 40\n\nconst RecentSearchItemButton = styled(Button)`\n border-radius: ${({theme}) => rem(theme.sanity.radius[2]) /* oxlint-disable-line no-deprecated -- will fix in follow up PR */};\n cursor: default;\n width: 100%;\n`\n\nconst SearchItemPillsBox = styled(Box)`\n flex-shrink: 3;\n`\n\nconst SearchItemQueryFlex = styled(Flex)`\n flex-shrink: 2;\n`\n\nconst CloseButtonDiv = styled.div`\n opacity: 0.8;\n visibility: hidden;\n\n @media (hover: hover) {\n ${RecentSearchItemButton}:hover & {\n visibility: visible;\n }\n &:hover {\n opacity: 0.4;\n }\n }\n`\n\nexport function RecentSearchItem({\n index,\n maxVisibleTypePillChars = DEFAULT_COMBINED_TYPE_COUNT,\n value,\n ...rest\n}: RecentSearchesProps) {\n const {dispatch} = useSearchState()\n const recentSearchesStore = useRecentSearchesStore()\n const telemetry = useTelemetry()\n\n // Determine how many characters are left to render type pills\n const availableCharacters = maxVisibleTypePillChars - value.query.length\n\n const handleClick = useCallback(() => {\n dispatch({type: 'TERMS_SET', filters: value?.filters, terms: value})\n\n // Add to Local Storage\n if (recentSearchesStore) {\n recentSearchesStore?.addSearch(value, value?.filters)\n }\n\n telemetry.log(RecentSearchClicked)\n }, [dispatch, recentSearchesStore, telemetry, value])\n\n const handleDelete = useCallback(\n (event: MouseEvent) => {\n event.stopPropagation()\n // Remove from Local Storage\n if (recentSearchesStore) {\n recentSearchesStore?.removeSearchAtIndex(index)\n }\n },\n [index, recentSearchesStore],\n )\n\n return (\n <Box {...rest}>\n <RecentSearchItemButton\n mode=\"bleed\"\n onClick={handleClick}\n paddingLeft={3}\n paddingRight={1}\n paddingY={1}\n tabIndex={-1}\n >\n <Flex align=\"stretch\">\n {/* Combination of <Inline> and a zero-width character to ensure icon is optically aligned with adjacent text */}\n <Inline paddingY={2}>\n <Text muted size={1}>\n <ClockIcon />\n </Text>\n <Text>&#8203;</Text>\n </Inline>\n <Flex align=\"stretch\" flex={1} gap={2} justify=\"flex-start\" marginLeft={3} wrap=\"wrap\">\n {/* Text query */}\n {value.query && (\n <SearchItemQueryFlex align=\"center\" paddingY={2}>\n <Text muted size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n {value.query}\n </Text>\n </SearchItemQueryFlex>\n )}\n {/* Document type */}\n {value.types.length > 0 && (\n <SearchItemPillsBox>\n <DocumentTypesPill availableCharacters={availableCharacters} types={value.types} />\n </SearchItemPillsBox>\n )}\n {/* Filters */}\n {value?.filters?.map((filter, i) => {\n // oxlint-disable-next-line no-array-index-key\n return <FilterPill key={i} filter={filter} />\n })}\n </Flex>\n\n {/* TODO: this is neither semantic nor accessible, consider revising */}\n <Flex align=\"center\">\n <CloseButtonDiv onClick={handleDelete}>\n <Flex padding={2}>\n <Text size={1}>\n <CloseIcon />\n </Text>\n </Flex>\n </CloseButtonDiv>\n </Flex>\n </Flex>\n </RecentSearchItemButton>\n </Box>\n )\n}\n","import {Box, Card, Text, useMediaIndex} from '@sanity/ui'\nimport {useCallback, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../../ui-components/button/Button'\nimport {CommandList} from '../../../../../../components/commandList/CommandList'\nimport {\n type CommandListHandle,\n type CommandListRenderItemCallback,\n} from '../../../../../../components/commandList/types'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {type RecentSearch, useRecentSearchesStore} from '../../datastores/recentSearches'\nimport {Instructions} from '../Instructions'\nimport {RecentSearchItem} from './item/RecentSearchItem'\n\nconst VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT = 36 // px\n\n// Max character count of selected document types (combined) by breakpoint\nconst MAX_COMBINED_TYPE_COUNT_SMALL = 20\nconst MAX_COMBINED_TYPE_COUNT_LARGE = 40\n\nconst RecentSearchesBox = styled(Card)`\n overflow-x: hidden;\n overflow-y: auto;\n position: relative;\n`\n\ninterface RecentSearchesProps {\n inputElement?: HTMLInputElement | null\n}\n\nexport function RecentSearches({inputElement}: RecentSearchesProps) {\n const {\n dispatch,\n state: {filtersVisible, fullscreen},\n } = useSearchState()\n const recentSearchesStore = useRecentSearchesStore()\n const recentSearches = useMemo(\n () => recentSearchesStore?.getRecentSearches(),\n [recentSearchesStore],\n )\n\n const commandListRef = useRef<CommandListHandle | null>(null)\n\n const {t} = useTranslation()\n\n /**\n * Remove terms from local storage.\n * Also re-focus input (on non-touch devices)\n */\n const handleClearRecentSearchesClick = useCallback(() => {\n if (recentSearchesStore) {\n recentSearchesStore.removeSearch()\n }\n commandListRef?.current?.focusInputElement()\n }, [recentSearchesStore])\n\n const mediaIndex = useMediaIndex()\n\n const maxVisibleTypePillChars = useMemo(() => {\n return mediaIndex < 2 ? MAX_COMBINED_TYPE_COUNT_SMALL : MAX_COMBINED_TYPE_COUNT_LARGE\n }, [mediaIndex])\n\n const renderItem = useCallback<CommandListRenderItemCallback<RecentSearch>>(\n (item, {virtualIndex}) => {\n return (\n <RecentSearchItem\n index={virtualIndex}\n maxVisibleTypePillChars={maxVisibleTypePillChars}\n paddingBottom={1}\n value={item}\n />\n )\n },\n [maxVisibleTypePillChars],\n )\n\n const hasRecentSearches = !!recentSearches.length\n\n return (\n <RecentSearchesBox\n borderTop={hasRecentSearches || (!hasRecentSearches && !filtersVisible && fullscreen)}\n flex={1}\n >\n {recentSearches.length > 0 ? (\n <>\n <Box paddingBottom={2} paddingTop={4} paddingX={3}>\n <Text muted size={1} weight=\"medium\">\n {t('search.recent-searches-label')}\n </Text>\n </Box>\n <Box>\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.recent-searches-aria-label')}\n inputElement={inputElement}\n initialIndex={0}\n itemHeight={VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT}\n items={recentSearches}\n paddingX={2}\n paddingY={1}\n renderItem={renderItem}\n />\n </Box>\n <Box paddingBottom={2} paddingTop={1} paddingX={2}>\n <Button\n mode=\"bleed\"\n onClick={handleClearRecentSearchesClick}\n tone=\"default\"\n text={t('search.action.clear-recent-searches')}\n muted\n />\n </Box>\n </>\n ) : (\n !filtersVisible && fullscreen && <Instructions />\n )}\n </RecentSearchesBox>\n )\n}\n","import {Container, Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\n\nexport function NoResults() {\n const {t} = useTranslation()\n\n return (\n <Container width={0}>\n <Stack aria-live=\"assertive\" gap={4} paddingX={4} paddingY={5}>\n <Text align=\"center\" muted size={1} weight=\"medium\">\n {t('search.no-results-title')}\n </Text>\n <Text align=\"center\" muted size={1}>\n {t('search.no-results-help-description')}\n </Text>\n </Stack>\n </Container>\n )\n}\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Flex} from '@sanity/ui'\n\nimport {TextWithTone} from '../../../../../components/textWithTone/TextWithTone'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\n\nexport function SearchError() {\n const {t} = useTranslation()\n\n return (\n <Flex\n align=\"center\"\n aria-live=\"assertive\"\n direction=\"column\"\n flex={1}\n gap={3}\n marginY={2}\n padding={4}\n >\n <Box marginBottom={1}>\n <TextWithTone tone=\"critical\">\n <WarningOutlineIcon />\n </TextWithTone>\n </Box>\n <TextWithTone size={2} tone=\"critical\" weight=\"medium\">\n {t('search.error.unspecified-error-title')}\n </TextWithTone>\n <TextWithTone size={1} tone=\"critical\">\n {t('search.error.unspecified-error-help-description')}\n </TextWithTone>\n </Flex>\n )\n}\n","import {type SearchStrategy} from '@sanity/types'\n\nimport {type SearchOrdering} from '../types'\n\nexport const getOrderings: (context: {\n searchStrategy?: SearchStrategy\n}) => Record<string, SearchOrdering> = ({searchStrategy}) => ({\n createdAsc: {\n ignoreScore: true,\n sort: {direction: 'asc', field: '_createdAt'},\n titleKey: 'search.ordering.created-ascending-label',\n },\n createdDesc: {\n ignoreScore: true,\n sort: {direction: 'desc', field: '_createdAt'},\n titleKey: 'search.ordering.created-descending-label',\n },\n relevance: {\n customMeasurementLabel: 'relevance',\n ...(searchStrategy === 'groqLegacy' ? {sort: {direction: 'desc', field: '_updatedAt'}} : {}),\n titleKey: 'search.ordering.best-match-label',\n },\n updatedAsc: {\n ignoreScore: true,\n sort: {direction: 'asc', field: '_updatedAt'},\n titleKey: 'search.ordering.updated-ascending-label',\n },\n updatedDesc: {\n ignoreScore: true,\n sort: {direction: 'desc', field: '_updatedAt'},\n titleKey: 'search.ordering.updated-descending-label',\n },\n})\n","import {SortIcon} from '@sanity/icons/Sort'\nimport {Card, Flex} from '@sanity/ui'\nimport {Menu, MenuDivider} from '@sanity/ui/menu'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useId, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../ui-components/button/Button'\nimport {MenuButton} from '../../../../../../ui-components/menuButton/MenuButton'\nimport {MenuItem} from '../../../../../../ui-components/menuItem/MenuItem'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {useWorkspace} from '../../../../workspace'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {getOrderings} from '../definitions/getOrderings'\nimport {type SearchOrdering} from '../types'\n\ninterface SearchDivider {\n type: 'divider'\n}\n\nconst SortMenuContentFlex = styled(Flex)`\n box-sizing: border-box;\n`\n\nfunction isSearchDivider(item: SearchDivider | SearchOrdering): item is SearchDivider {\n return (item as SearchDivider).type === 'divider'\n}\n\nfunction CustomMenuItem({ordering}: {ordering: SearchOrdering}) {\n const {t} = useTranslation()\n const {\n dispatch,\n state: {ordering: currentOrdering},\n } = useSearchState()\n\n const handleClick = useCallback(() => {\n dispatch({ordering, type: 'ORDERING_SET'})\n }, [dispatch, ordering])\n\n const isSelected = useMemo(() => isEqual(currentOrdering, ordering), [currentOrdering, ordering])\n\n return (\n <MenuItem\n onClick={handleClick}\n pressed={isSelected}\n tone=\"default\"\n text={t(ordering.titleKey)}\n />\n )\n}\n\nexport function SortMenu() {\n const {t} = useTranslation()\n const {strategy: searchStrategy} = useWorkspace().search\n const {\n state: {ordering},\n } = useSearchState()\n\n const menuButtonId = useId()\n\n const menuOrderings: (SearchDivider | SearchOrdering)[] = useMemo(() => {\n const orderings = getOrderings({searchStrategy})\n return [\n orderings.relevance,\n {type: 'divider'},\n orderings.createdAsc,\n orderings.createdDesc,\n {type: 'divider'},\n orderings.updatedAsc,\n orderings.updatedDesc,\n ]\n }, [searchStrategy])\n\n const currentMenuItem = menuOrderings.find(\n (item): item is SearchOrdering => isEqual(ordering, item) && !isSearchDivider(item),\n )\n\n if (!currentMenuItem) {\n return null\n }\n\n return (\n <Card borderBottom>\n <SortMenuContentFlex align=\"center\" flex={1} padding={2}>\n <MenuButton\n button={<Button mode=\"bleed\" icon={SortIcon} text={t(currentMenuItem.titleKey)} />}\n id={menuButtonId || ''}\n menu={\n <Menu>\n {menuOrderings.map((item, index) => {\n if (isSearchDivider(item)) {\n // oxlint-disable-next-line no-array-index-key\n return <MenuDivider key={index} />\n }\n return (\n <CustomMenuItem\n // oxlint-disable-next-line no-array-index-key\n key={index}\n ordering={item}\n />\n )\n })}\n </Menu>\n }\n popover={{placement: 'bottom-start', portal: true, radius: 2}}\n />\n </SortMenuContentFlex>\n </Card>\n )\n}\n","/* oxlint-disable i18next/no-literal-string */\nimport {Card, type CardTone, Inline, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../../../../../ui-components/tooltip/Tooltip'\nimport {type WeightedHit} from '../../../../../../../search/common/types'\n\ninterface DebugScoreProps {\n data: WeightedHit\n}\n\nconst DebugScoreCard = styled(Card)`\n cursor: help;\n left: 0;\n position: absolute;\n top: 0;\n`\n\nexport function DebugOverlay({data}: DebugScoreProps) {\n const {score} = data\n\n let tone: CardTone = 'default'\n if (score <= 0.1) {\n tone = 'critical'\n } else if (score >= 0.5) {\n tone = 'primary'\n }\n\n const matchingStories = data.stories.filter((story) => story.score > 0)\n\n return (\n <>\n <Tooltip\n content={\n <Stack gap={2}>\n {matchingStories.length ? (\n <>\n {matchingStories.map((story) => (\n <Inline key={story.path} gap={3}>\n <Code size={0} weight=\"medium\">\n {story.path}\n </Code>\n <Code size={0}>{story.why}</Code>\n </Inline>\n ))}\n </>\n ) : (\n <Code size={0}>No matches</Code>\n )}\n </Stack>\n }\n placement=\"bottom-start\"\n portal\n >\n <DebugScoreCard padding={1} shadow={1} tone={tone}>\n <Code size={0}>score: {score}</Code>\n </DebugScoreCard>\n </Tooltip>\n </>\n )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {Card, Flex} from '@sanity/ui'\nimport {type MouseEvent, useCallback, useDeferredValue} from 'react'\nimport {styled} from 'styled-components'\n\nimport {CommandList} from '../../../../../../components/commandList/CommandList'\nimport {type CommandListRenderItemCallback} from '../../../../../../components/commandList/types'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {type WeightedHit} from '../../../../../../search/common/types'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {useRecentSearchesStore} from '../../datastores/recentSearches'\nimport {NoResults} from '../NoResults'\nimport {SearchError} from '../SearchError'\nimport {SortMenu} from '../SortMenu'\nimport {DebugOverlay} from './item/DebugOverlay'\nimport {type ItemSelectHandler, SearchResultItem} from './item/SearchResultItem'\n\nconst VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT = 57 // px\nconst VIRTUAL_LIST_OVERSCAN = 4\n\nconst SearchResultsInnerFlex = styled(Flex)<{$loadingFirstPage: boolean}>`\n opacity: ${({$loadingFirstPage}) => ($loadingFirstPage ? 0.5 : 1)};\n overflow-x: hidden;\n overflow-y: auto;\n position: relative;\n transition: 300ms opacity;\n width: 100%;\n`\n\ninterface SearchResultsProps {\n disableIntentLink?: boolean\n inputElement: HTMLInputElement | null\n onItemSelect?: ItemSelectHandler\n previewPerspective?: StackablePerspective[]\n /**\n * The variant the result previews are resolved in, as a bare variant id.\n */\n previewVariant?: string\n}\n\nexport function SearchResults({\n disableIntentLink,\n inputElement,\n onItemSelect,\n previewPerspective,\n previewVariant,\n}: SearchResultsProps) {\n const {\n dispatch,\n onClose,\n setSearchCommandList,\n state: {debug, filters, fullscreen, lastActiveIndex, result, terms, cursor},\n } = useSearchState()\n const {t} = useTranslation()\n const recentSearchesStore = useRecentSearchesStore()\n\n // deferral only pays off because CommandList is memo()'d, so the urgent render skips the heavy row subtree\n const deferredHits = useDeferredValue(result.hits)\n const isPending = deferredHits !== result.hits\n\n // requiring result.hits too hides the stale list the instant an empty result settles\n const hasSearchResults = deferredHits.length > 0 && result.hits.length > 0\n const hasNoSearchResults = result.hits.length === 0 && result.loaded\n const hasError = result.error\n\n /**\n * Add current search to recent searches, trigger child item click and close search\n */\n const handleSearchResultClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n if (recentSearchesStore) {\n recentSearchesStore.addSearch(terms, filters)\n }\n // We don't want to close the search if they are opening their result in a new tab\n if (!e.metaKey && !e.ctrlKey) {\n onClose?.()\n }\n },\n [filters, onClose, recentSearchesStore, terms],\n )\n\n const handleEndReached = useCallback(() => {\n dispatch({type: 'PAGE_INCREMENT'})\n }, [dispatch])\n\n const renderItem = useCallback<CommandListRenderItemCallback<WeightedHit>>(\n (item) => {\n return (\n <>\n <SearchResultItem\n disableIntentLink={disableIntentLink}\n documentId={item.hit._id || ''}\n documentType={item.hit._type}\n onClick={handleSearchResultClick}\n onItemSelect={onItemSelect}\n previewPerspective={previewPerspective}\n previewVariant={previewVariant}\n paddingY={1}\n />\n {debug && <DebugOverlay data={item} />}\n </>\n )\n },\n [\n debug,\n disableIntentLink,\n handleSearchResultClick,\n onItemSelect,\n previewPerspective,\n previewVariant,\n ],\n )\n\n return (\n <Flex>\n <Card\n borderTop={fullscreen || !!(hasError || hasSearchResults || hasNoSearchResults)}\n flex={1}\n >\n <Flex direction=\"column\" height=\"fill\">\n {/* Sort menu */}\n {hasSearchResults && <SortMenu />}\n\n {/* Results */}\n <SearchResultsInnerFlex\n $loadingFirstPage={result.loading && cursor === null}\n aria-busy={result.loading || isPending}\n flex={1}\n >\n {hasError ? (\n <SearchError />\n ) : (\n <>\n {hasSearchResults && (\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.search-results-label')}\n data-testid=\"search-results\"\n fixedHeight\n initialIndex={lastActiveIndex}\n inputElement={inputElement}\n itemHeight={VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT}\n items={deferredHits}\n overscan={VIRTUAL_LIST_OVERSCAN}\n onEndReached={handleEndReached}\n paddingX={2}\n paddingY={1}\n ref={setSearchCommandList}\n renderItem={renderItem}\n />\n )}\n {hasNoSearchResults && <NoResults />}\n </>\n )}\n </SearchResultsInnerFlex>\n </Flex>\n </Card>\n </Flex>\n )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {Card, Portal, useClickOutsideEvent, useLayer} from '@sanity/ui'\nimport {AnimatePresence, motion, type Transition, type Variants} from 'motion/react'\nimport {useRef, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {supportsTouch} from '../../../../../util/supportsTouch'\nimport {\n POPOVER_INPUT_PADDING,\n POPOVER_MAX_HEIGHT,\n POPOVER_MAX_WIDTH,\n POPOVER_RADIUS,\n} from '../constants'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {SearchWrapper} from './common/SearchWrapper'\nimport {Filters} from './filters/Filters'\nimport {RecentSearches} from './recentSearches/RecentSearches'\nimport {SearchHeader} from './SearchHeader'\nimport {type ItemSelectHandler} from './searchResults/item/SearchResultItem'\nimport {SearchResults} from './searchResults/SearchResults'\n\n/**\n * @internal\n */\nexport interface SearchPopoverProps {\n disableFocusLock?: boolean\n disableIntentLink?: boolean\n onClose: () => void\n onItemSelect?: ItemSelectHandler\n previewPerspective?: StackablePerspective[]\n /**\n * The variant the result previews are resolved in, as a bare variant id.\n */\n previewVariant?: string\n /**\n * If provided, will trigger to open the search popover when user types hotkey + k\n */\n onOpen?: () => void\n open: boolean\n}\n\nconst ANIMATION_TRANSITION: Transition = {\n duration: 0.4,\n type: 'spring',\n}\n\nconst CARD_VARIANTS: Variants = {\n open: {opacity: 1, scale: 1, x: '-50%'},\n closed: {opacity: 0, scale: 0.99, x: '-50%'},\n}\n\nconst OVERLAY_VARIANTS: Variants = {\n open: {opacity: 1},\n closed: {opacity: 0},\n}\n\nconst Y_POSITION = 12 // vh\n\nconst MotionOverlay = styled(motion.create(Card))`\n background-color: var(--card-backdrop-color);\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n`\n\nconst SearchMotionCard = styled(motion.create(Card))`\n display: flex !important;\n flex-direction: column;\n left: 50%;\n max-height: min(\n calc(100vh - ${Y_POSITION}vh - ${POPOVER_INPUT_PADDING}px),\n ${POPOVER_MAX_HEIGHT}px\n );\n position: absolute;\n top: ${Y_POSITION}vh;\n width: min(calc(100vw - ${POPOVER_INPUT_PADDING * 2}px), ${POPOVER_MAX_WIDTH}px);\n`\n\n/**\n * @internal\n */\nexport function SearchPopover({\n disableFocusLock,\n disableIntentLink,\n onClose,\n onItemSelect,\n onOpen,\n previewPerspective,\n previewVariant,\n open,\n}: SearchPopoverProps) {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n\n const popoverElement = useRef<HTMLDivElement | null>(null)\n\n const {isTopLayer, zIndex} = useLayer()\n\n const {\n onClose: onSearchClose,\n state: {filtersVisible, terms},\n } = useSearchState()\n\n const hasValidTerms = hasSearchableTerms({terms})\n\n /**\n * Check for top-most layer to prevent closing if a portalled element (i.e. menu button) is active\n */\n useClickOutsideEvent(isTopLayer && open && !!onSearchClose && onSearchClose, () => [\n popoverElement.current,\n ])\n\n return (\n <SearchWrapper hasValidTerms={hasValidTerms} onClose={onClose} onOpen={onOpen} open={open}>\n <AnimatePresence>\n {open && (\n <Portal>\n <FocusLock autoFocus={!supportsTouch} disabled={disableFocusLock} returnFocus>\n <MotionOverlay\n animate=\"open\"\n exit=\"closed\"\n initial=\"closed\"\n style={{zIndex}}\n transition={ANIMATION_TRANSITION}\n variants={OVERLAY_VARIANTS}\n />\n\n <SearchMotionCard\n animate=\"open\"\n exit=\"closed\"\n initial=\"closed\"\n overflow=\"hidden\"\n radius={POPOVER_RADIUS}\n ref={popoverElement}\n shadow={2}\n style={{zIndex}}\n transition={ANIMATION_TRANSITION}\n variants={CARD_VARIANTS}\n >\n <SearchHeader onClose={onClose} ref={setInputElement} />\n {filtersVisible && (\n <Card borderTop flex=\"none\">\n <Filters />\n </Card>\n )}\n {hasValidTerms ? (\n <SearchResults\n inputElement={inputElement}\n onItemSelect={onItemSelect}\n disableIntentLink={disableIntentLink}\n previewPerspective={previewPerspective}\n previewVariant={previewVariant}\n />\n ) : (\n <RecentSearches inputElement={inputElement} />\n )}\n </SearchMotionCard>\n </FocusLock>\n </Portal>\n )}\n </AnimatePresence>\n </SearchWrapper>\n )\n}\n","import {type SearchTerms} from '../../../../../search/common/types'\nimport {type RecentSearch} from '../datastores/recentSearches'\n\nexport function isRecentSearchTerms(terms: SearchTerms | RecentSearch): terms is RecentSearch {\n return typeof (terms as RecentSearch).__recent !== 'undefined'\n}\n","import debug from 'debug'\n\nimport {DEBUG_FRAGMENT} from '../constants'\n\nconst rootName = 'core:studio:navbar:search:'\n\nexport function debugWithName(name: string): debug.Debugger {\n const namespace = `${rootName}${name}`\n if (debug && debug.enabled(namespace)) {\n return debug(namespace)\n }\n return debug(rootName)\n}\n\nexport function isDebugMode(): boolean {\n return typeof window === 'undefined'\n ? false\n : window.location.hash.slice(1).split(';').includes(DEBUG_FRAGMENT)\n}\n","import {type CurrentUser, type SchemaType, type SearchStrategy} from '@sanity/types'\n\nimport {type SearchHit, type SearchTerms} from '../../../../../../search/common/types'\nimport {removeDupes} from '../../../../../../util/draftUtils'\nimport {type RecentSearch} from '../../datastores/recentSearches'\nimport {type SearchFieldDefinitionDictionary} from '../../definitions/fields'\nimport {type SearchFilterDefinitionDictionary} from '../../definitions/filters'\nimport {getOrderings} from '../../definitions/getOrderings'\nimport {\n getOperatorDefinition,\n getOperatorInitialValue,\n type SearchOperatorDefinitionDictionary,\n} from '../../definitions/operators'\nimport {type SearchFilter, type SearchOrdering} from '../../types'\nimport {debugWithName, isDebugMode} from '../../utils/debug'\nimport {\n generateFilterQuery,\n getFieldFromFilter,\n getFilterKey,\n narrowDocumentTypes,\n} from '../../utils/filterUtils'\nimport {isRecentSearchTerms} from '../../utils/isRecentSearchTerms'\nimport {sortTypes} from '../../utils/selectors'\n\ninterface PaginationState {\n cursor: string | null\n nextCursor: string | null\n}\n\nexport type SearchReducerState = PaginationState & {\n currentUser: CurrentUser | null\n debug: boolean\n definitions: SearchDefinitions\n documentTypesNarrowed: string[]\n filters: SearchFilter[]\n filtersVisible: boolean\n fullscreen?: boolean\n lastAddedFilter?: SearchFilter | null\n lastActiveIndex: number\n ordering: SearchOrdering\n result: SearchResult\n terms: RecentSearch | SearchTerms\n strategy?: SearchStrategy\n disabledDocumentIds?: string[]\n canDisableAction?: boolean\n}\n\nexport interface SearchDefinitions {\n fields: SearchFieldDefinitionDictionary\n filters: SearchFilterDefinitionDictionary\n operators: SearchOperatorDefinitionDictionary\n}\n\nexport interface SearchResult {\n error: Error | null\n hasLocal: boolean\n hits: SearchHit[]\n loaded: boolean\n loading: boolean\n}\n\nexport interface InitialSearchState {\n currentUser: CurrentUser | null\n fullscreen?: boolean\n definitions: SearchDefinitions\n pagination: PaginationState\n strategy?: SearchStrategy\n}\n\nexport function initialSearchState({\n currentUser,\n fullscreen,\n definitions,\n pagination,\n strategy,\n}: InitialSearchState): SearchReducerState {\n return {\n currentUser,\n debug: isDebugMode(),\n documentTypesNarrowed: [],\n filters: [],\n filtersVisible: true,\n fullscreen,\n lastActiveIndex: -1,\n ordering: getOrderings({searchStrategy: strategy}).relevance,\n ...pagination,\n result: {\n error: null,\n hasLocal: false,\n hits: [],\n loaded: false,\n loading: false,\n },\n terms: {\n query: '',\n types: [],\n },\n definitions,\n strategy,\n }\n}\n\nexport type FiltersVisibleSet = {type: 'FILTERS_VISIBLE_SET'; visible: boolean}\nexport type LastActiveIndexSet = {type: 'LAST_ACTIVE_INDEX_SET'; index: number}\nexport type PageIncrement = {type: 'PAGE_INCREMENT'}\nexport type OrderingReset = {type: 'ORDERING_RESET'}\nexport type OrderingSet = {ordering: SearchOrdering; type: 'ORDERING_SET'}\nexport type SearchClear = {type: 'SEARCH_CLEAR'}\nexport type SearchRequestComplete = {\n type: 'SEARCH_REQUEST_COMPLETE'\n hits: SearchHit[]\n nextCursor: string | undefined\n}\nexport type SearchRequestError = {type: 'SEARCH_REQUEST_ERROR'; error: Error}\nexport type SearchRequestStart = {type: 'SEARCH_REQUEST_START'}\nexport type TermsFiltersAdd = {filter: SearchFilter; type: 'TERMS_FILTERS_ADD'}\nexport type TermsFiltersClear = {type: 'TERMS_FILTERS_CLEAR'}\nexport type TermsFiltersRemove = {filterKey: string; type: 'TERMS_FILTERS_REMOVE'}\nexport type TermsFiltersSetOperator = {\n filterKey: string\n operatorType: string\n type: 'TERMS_FILTERS_SET_OPERATOR'\n}\nexport type TermsFiltersSetValue = {\n filterKey: string\n type: 'TERMS_FILTERS_SET_VALUE'\n value?: any\n}\nexport type TermsQuerySet = {type: 'TERMS_QUERY_SET'; query: string}\nexport type TermsSet = {type: 'TERMS_SET'; filters?: SearchFilter[]; terms: SearchTerms}\nexport type TermsTypeAdd = {type: 'TERMS_TYPE_ADD'; schemaType: SchemaType}\nexport type TermsTypeRemove = {type: 'TERMS_TYPE_REMOVE'; schemaType: SchemaType}\nexport type TermsTypesClear = {type: 'TERMS_TYPES_CLEAR'}\n\nexport type SearchAction =\n | FiltersVisibleSet\n | LastActiveIndexSet\n | OrderingReset\n | OrderingSet\n | PageIncrement\n | SearchClear\n | SearchRequestComplete\n | SearchRequestError\n | SearchRequestStart\n | TermsFiltersAdd\n | TermsFiltersClear\n | TermsFiltersSetOperator\n | TermsFiltersRemove\n | TermsFiltersSetValue\n | TermsQuerySet\n | TermsSet\n | TermsTypeAdd\n | TermsTypeRemove\n | TermsTypesClear\n\nconst debug = debugWithName('reducer')\n\nexport function searchReducer(state: SearchReducerState, action: SearchAction): SearchReducerState {\n let prefix = '🔍'\n if (action.type.startsWith('SEARCH_REQUEST')) {\n prefix = '🚨'\n }\n if (action.type.startsWith('RECENT_SEARCHES')) {\n prefix = '💾'\n }\n debug(prefix, action)\n\n switch (action.type) {\n case 'FILTERS_VISIBLE_SET':\n return {\n ...state,\n filtersVisible: action.visible,\n }\n case 'LAST_ACTIVE_INDEX_SET':\n return {\n ...state,\n lastActiveIndex: action.index,\n }\n case 'ORDERING_RESET':\n return {\n ...state,\n ordering: getOrderings({searchStrategy: state.strategy}).relevance,\n terms: stripRecent(state.terms),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n case 'ORDERING_SET':\n return {\n ...state,\n ordering: action.ordering,\n terms: stripRecent(state.terms),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n case 'PAGE_INCREMENT':\n return {\n ...state,\n cursor: state.nextCursor ?? state.cursor,\n nextCursor: null,\n terms: stripRecent(state.terms),\n }\n case 'SEARCH_CLEAR':\n return {\n ...state,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n hasLocal: false,\n hits: [],\n },\n }\n case 'SEARCH_REQUEST_COMPLETE':\n return {\n ...state,\n nextCursor: action.nextCursor ?? null,\n result: {\n ...state.result,\n error: null,\n hasLocal: true,\n hits: removeDupes(\n [...(state.result.hasLocal ? state.result.hits : []), ...action.hits].map(\n ({hit}) => hit,\n ),\n ).map((hit) => ({hit})),\n loaded: true,\n loading: false,\n },\n }\n case 'SEARCH_REQUEST_ERROR':\n return {\n ...state,\n result: {\n ...state.result,\n error: action.error,\n loaded: false,\n loading: false,\n },\n }\n case 'SEARCH_REQUEST_START':\n return {\n ...state,\n result: {\n ...state.result,\n loaded: false,\n loading: true,\n },\n }\n case 'TERMS_FILTERS_ADD': {\n const newFilter: SearchFilter = {\n ...action.filter,\n value: getOperatorInitialValue(state.definitions.operators, action.filter.operatorType),\n }\n const filters = [...state.filters, newFilter]\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types: state.terms.types,\n }),\n filters,\n lastAddedFilter: newFilter,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_CLEAR': {\n const filters: SearchFilter[] = []\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types: state.terms.types,\n }),\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_REMOVE': {\n const index = state.filters.findIndex((filter) => getFilterKey(filter) === action.filterKey)\n\n const filters = [\n ...state.filters.slice(0, index), //\n ...state.filters.slice(index + 1),\n ]\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types: state.terms.types,\n }),\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_SET_OPERATOR': {\n // Compare input components between current and target operators, and update\n // target filter value if it has changed.\n const matchedFilter = state.filters.find(\n (filter) => getFilterKey(filter) === action.filterKey,\n )\n const currentOperator = getOperatorDefinition(\n state.definitions.operators,\n matchedFilter?.operatorType,\n )\n const nextOperator = getOperatorDefinition(state.definitions.operators, action.operatorType)\n const nextInitialValue = nextOperator?.initialValue\n const inputComponentChanged = currentOperator?.inputComponent != nextOperator?.inputComponent\n\n const filters = state.filters.map((filter) => {\n if (getFilterKey(filter) === action.filterKey) {\n return {\n ...filter,\n operatorType: action.operatorType,\n ...(inputComponentChanged ? {value: nextInitialValue} : {}),\n }\n }\n return filter\n })\n\n return {\n ...state,\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_SET_VALUE': {\n const filters = state.filters.map((filter) => {\n if (getFilterKey(filter) === action.filterKey) {\n return {\n ...filter,\n value: action.value,\n }\n }\n return filter\n })\n\n return {\n ...state,\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_QUERY_SET':\n return {\n ...state,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n query: action.query,\n }),\n }\n case 'TERMS_SET': {\n const filters = action.filters || []\n const types = [\n ...(state.terms.types || []), //\n ...action.terms.types,\n ].sort(sortTypes)\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types,\n }),\n filters,\n lastAddedFilter: null,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: {\n ...action.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n }\n }\n case 'TERMS_TYPE_ADD': {\n const types = [\n ...(state.terms.types || []), //\n action.schemaType,\n ].sort(sortTypes)\n\n // Get narrowed document types based on selected types only (ignore filters)\n const documentTypesNarrowed = narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters: [],\n types,\n })\n\n // Remove field filters that don't qualify under the above narrowed document types.\n // Non field-filters are always included.\n const filters = state.filters.filter((f) => {\n const fieldDefinition = getFieldFromFilter(state.definitions.fields, f)\n if (fieldDefinition) {\n // An empty documentTypes array denotes support across all fields.\n if (fieldDefinition.documentTypes.length === 0) {\n return true\n }\n return documentTypesNarrowed.every(\n (type) => fieldDefinition.documentTypes.findIndex((t) => t === type) > -1,\n )\n }\n return true\n })\n\n return {\n ...state,\n documentTypesNarrowed,\n filters,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n operatorDefinitions: state.definitions.operators,\n filters,\n }),\n types,\n }),\n }\n }\n case 'TERMS_TYPE_REMOVE': {\n const types = (state.terms.types || []).filter((s) => s !== action.schemaType)\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters: state.filters,\n types,\n }),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n types,\n }),\n }\n }\n case 'TERMS_TYPES_CLEAR': {\n const types: SchemaType[] = []\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters: state.filters,\n types,\n }),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n types: [],\n }),\n }\n }\n default:\n return state\n }\n}\n\n/**\n * This function is used to strip __recent from terms, generally whenever there's a change in\n * search terms or options that would otherwise trigger an additional search request.\n * (e.g. updating the search query, changing a sort filter, adding / removing document types)\n *\n * This is done so we can better disambiguate between requests sent as a result of clicking a 'recent search'\n * for purposes of measurement.\n *\n */\n// @todo: remove this (and associated tests) once client-side instrumentation is available\nfunction stripRecent(terms: RecentSearch | SearchTerms) {\n if (isRecentSearchTerms(terms)) {\n const {__recent, ...rest} = terms\n return rest\n }\n return terms\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {type ReactNode, useCallback, useEffect, useMemo, useReducer, useRef, useState} from 'react'\nimport {SearchContext} from 'sanity/_singletons'\n\nimport {type CommandListHandle} from '../../../../../../components/commandList/types'\nimport {useSchema} from '../../../../../../hooks/useSchema'\nimport {useActiveReleases} from '../../../../../../releases/store/useActiveReleases'\nimport {type SearchHit, type SearchTerms} from '../../../../../../search/common/types'\nimport {useCurrentUser} from '../../../../../../store/user/hooks'\nimport {useSource} from '../../../../../source'\nimport {GlobalSearchLatencyMeasured} from '../../__telemetry__/search.telemetry'\nimport {SEARCH_LIMIT} from '../../constants'\nimport {type RecentSearch} from '../../datastores/recentSearches'\nimport {createFieldDefinitionDictionary, createFieldDefinitions} from '../../definitions/fields'\nimport {createFilterDefinitionDictionary} from '../../definitions/filters'\nimport {createOperatorDefinitionDictionary} from '../../definitions/operators'\nimport {useSearch} from '../../hooks/useSearch'\nimport {type SearchOrdering} from '../../types'\nimport {validateFilter} from '../../utils/filterUtils'\nimport {hasSearchableTerms} from '../../utils/hasSearchableTerms'\nimport {isRecentSearchTerms} from '../../utils/isRecentSearchTerms'\nimport {initialSearchState, searchReducer} from './reducer'\n\ninterface SearchProviderProps {\n children?: ReactNode\n fullscreen?: boolean\n /**\n * list of perspective ids\n * if provided, then it means that the search is being done using a specific list of perspectives\n */\n\n /**\n * list of document ids that should be be disabled in the search\n * if they are found to exist in the search results\n * if provided, then ids should be checked against this list\n */\n disabledDocumentIds?: string[]\n /**\n * If true, the search action (such as adding a document to a release list, for example) should be allowed to disable under the right conditions\n */\n canDisableAction?: boolean\n}\n\n/**\n * @internal\n */\nexport function SearchProvider({\n children,\n fullscreen,\n disabledDocumentIds,\n canDisableAction,\n}: SearchProviderProps) {\n const [onClose, setOnClose] = useState<(() => void) | null>(null)\n const [searchCommandList, setSearchCommandList] = useState<CommandListHandle | null>(null)\n const {data: releases} = useActiveReleases()\n const schema = useSchema()\n const currentUser = useCurrentUser()\n const {\n search: {operators, filters, strategy},\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n } = useSource()\n const telemetry = useTelemetry()\n\n // Timing ref for `Global Search Latency Measured`. Set to `performance.now()`\n // on a valid (searchable-terms) `onStart`, cleared on log. Null means the\n // most recent `onStart` was for empty/invalid terms — skip logging.\n const searchStartRef = useRef<number | null>(null)\n // Snapshot of terms at `onStart` time, used to build the log payload in\n // `onComplete`/`onError` without racing the state update.\n const searchStartTermsRef = useRef<SearchTerms | RecentSearch | null>(null)\n\n // Create field, filter and operator dictionaries\n const {fieldDefinitions, filterDefinitions, operatorDefinitions} = useMemo(() => {\n return {\n fieldDefinitions: createFieldDefinitionDictionary(createFieldDefinitions(schema, filters)),\n filterDefinitions: createFilterDefinitionDictionary(filters),\n operatorDefinitions: createOperatorDefinitionDictionary(operators),\n }\n }, [filters, operators, schema])\n\n const initialState = useMemo(\n () =>\n initialSearchState({\n currentUser,\n fullscreen,\n definitions: {\n fields: fieldDefinitions,\n operators: operatorDefinitions,\n filters: filterDefinitions,\n },\n pagination: {\n cursor: null,\n nextCursor: null,\n },\n strategy,\n }),\n [currentUser, fullscreen, fieldDefinitions, operatorDefinitions, filterDefinitions, strategy],\n )\n const [state, dispatch] = useReducer(searchReducer, initialState)\n\n const {documentTypesNarrowed, filters: currentFilters, ordering, cursor, result, terms} = state\n\n const isMountedRef = useRef(false)\n const previousOrderingRef = useRef<SearchOrdering>(initialState.ordering)\n const previousCursorRef = useRef<string | null>(initialState.cursor)\n const previousTermsRef = useRef<SearchTerms | RecentSearch>(initialState.terms)\n\n // Keep a live ref to the current terms so that the `onStart` callback\n // (fired synchronously inside the `useSearch` observable pipeline) can\n // snapshot the *current* search's terms, not the previous one. The ref\n // is updated in an effect rather than during render, because React\n // Compiler forbids writes to refs during render.\n const currentTermsRef = useRef<SearchTerms | RecentSearch>(terms)\n useEffect(() => {\n currentTermsRef.current = terms\n }, [terms])\n\n const handleSearchComplete = useCallback(\n (searchResult: {hits: SearchHit[]; nextCursor: string | undefined}) => {\n const t0 = searchStartRef.current\n const startTerms = searchStartTermsRef.current\n searchStartRef.current = null\n searchStartTermsRef.current = null\n dispatch({...searchResult, type: 'SEARCH_REQUEST_COMPLETE'})\n if (t0 !== null && startTerms !== null) {\n telemetry.log(GlobalSearchLatencyMeasured, {\n durationMs: performance.now() - t0,\n queryLength: startTerms.query.length,\n typeFilterCount: startTerms.types.length,\n resultCount: searchResult.hits.length,\n strategy: strategy ?? null,\n errored: false,\n })\n }\n },\n [strategy, telemetry],\n )\n\n const handleSearchError = useCallback(\n (error: Error) => {\n const t0 = searchStartRef.current\n const startTerms = searchStartTermsRef.current\n searchStartRef.current = null\n searchStartTermsRef.current = null\n dispatch({error, type: 'SEARCH_REQUEST_ERROR'})\n if (t0 !== null && startTerms !== null) {\n telemetry.log(GlobalSearchLatencyMeasured, {\n durationMs: performance.now() - t0,\n queryLength: startTerms.query.length,\n typeFilterCount: startTerms.types.length,\n resultCount: 0,\n strategy: strategy ?? null,\n errored: true,\n })\n }\n },\n [strategy, telemetry],\n )\n\n const handleSearchStart = useCallback(() => {\n // `useSearch` fires `onStart` for every request, including empty-term\n // short-circuit paths. Only start the timer if we have searchable terms.\n const currentTerms = currentTermsRef.current\n if (hasSearchableTerms({terms: currentTerms})) {\n searchStartRef.current = performance.now()\n searchStartTermsRef.current = currentTerms\n } else {\n searchStartRef.current = null\n searchStartTermsRef.current = null\n }\n dispatch({type: 'SEARCH_REQUEST_START'})\n }, [])\n\n const {handleSearch, searchState} = useSearch({\n initialState: {...result, terms},\n onComplete: handleSearchComplete,\n onError: handleSearchError,\n onStart: handleSearchStart,\n schema,\n })\n\n const hasValidTerms = hasSearchableTerms({terms})\n\n // Get a narrowed list of document types to search on based on any current active filters.\n const documentTypes = documentTypesNarrowed.map((documentType) => schema.get(documentType)!)\n\n // Get a list of 'complete' filters (filters that return valid values)\n const completeFilters = currentFilters.filter((filter) =>\n validateFilter({\n fieldDefinitions,\n filter,\n filterDefinitions,\n operatorDefinitions,\n }),\n )\n\n /**\n * Trigger search when any terms (query or selected types) OR current pageIndex has changed\n *\n * Note that we compare inbound terms with our last local snapshot, and not the value of\n * `searchState` from `useSearch`, as that only contains a reference to the last fully _executed_ request.\n * There are cases were we may not run searches when terms change (e.g. when search terms are empty / invalid).\n */\n useEffect(() => {\n const orderingChanged = !isEqual(ordering, previousOrderingRef.current)\n const cursorChanged = cursor !== previousCursorRef.current\n const termsChanged = !isEqual(terms, previousTermsRef.current)\n\n if (orderingChanged || cursorChanged || termsChanged) {\n let sortLabel = 'findability-sort:'\n\n if (ordering?.customMeasurementLabel || ordering.sort) {\n // Use a custom label if provided, otherwise return field and direction, e.g. `_updatedAt desc`\n sortLabel +=\n ordering?.customMeasurementLabel || `${ordering.sort?.field} ${ordering.sort?.direction}`\n }\n\n handleSearch({\n options: {\n // Comments prepended to each query for future measurement\n comments: [\n ...(isRecentSearchTerms(terms)\n ? [`findability-recent-search:${terms.__recent.index}`]\n : []),\n `findability-selected-types:${terms.types.length}`,\n sortLabel,\n `findability-source: global`,\n `findability-filter-count:${completeFilters.length}`,\n ],\n // `groq2024` supports pagination. Therefore, fetch fewer results.\n limit: strategy === 'groq2024' ? 25 : SEARCH_LIMIT,\n skipSortByScore: ordering.ignoreScore,\n ...(ordering.sort ? {sort: [ordering.sort]} : {}),\n cursor: cursor || undefined,\n perspective: 'raw',\n },\n terms: {\n ...terms,\n // Narrow document type search\n ...(documentTypes ? {types: documentTypes} : {}),\n },\n })\n\n // Update previousCursorRef snapshot only on a valid search request\n if (cursorChanged) {\n previousCursorRef.current = cursor\n }\n }\n\n // Update snapshots, even if no search request was executed\n previousOrderingRef.current = ordering\n previousTermsRef.current = terms\n }, [\n completeFilters.length,\n currentFilters,\n documentTypes,\n handleSearch,\n hasValidTerms,\n ordering,\n searchState.terms,\n terms,\n cursor,\n strategy,\n releases,\n ])\n\n /**\n * Reset search hits / state when (after initial amount):\n * - we have no valid search terms and\n * - we have existing hits\n */\n useEffect(() => {\n if (!hasValidTerms && isMountedRef?.current && result.hits.length > 0) {\n dispatch({type: 'SEARCH_CLEAR'})\n }\n\n isMountedRef.current = true\n }, [dispatch, hasValidTerms, result.hits, terms.query, terms.types])\n\n const value = useMemo(\n () => ({\n dispatch,\n onClose,\n searchCommandList,\n setSearchCommandList,\n setOnClose,\n state: {\n ...state,\n fullscreen,\n disabledDocumentIds,\n canDisableAction,\n },\n }),\n [fullscreen, disabledDocumentIds, canDisableAction, onClose, searchCommandList, state],\n )\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SearchProvider-D3w4Bvul.js","names":["useMemo","useObservable","map","startWith","useProjectStore","INITIAL_STATE","value","loading","useProjectOrganizationId","$","_c","projectStore","t0","getOrganizationId","pipe","_temp","obs$","res","useSyncObservable","useRenderingContextStore","useRenderingContext","renderingContextStore","renderingContext","Card","CardProps","ElementType","HTMLProps","useContext","useMemo","RefAttributes","PreviewCardContext","css","styled","StyledCard","PreviewCardContextValue","selected","usePreviewCard","context","Error","PreviewCard","props","$","_c","as","children","ref","restProps","t0","value","t1","t2","ReferenceInputPreviewCard","HTMLProps","ReactNode","useMemo","RefAttributes","styled","Button","ButtonProps","StatusButtonProps","HTMLButtonElement","reason","StyledButton","Dot","div","width","height","borderRadius","boxShadow","StatusButton","props","$","_c","disabledProp","label","ref","restProps","t0","tone","disabled","mode","undefined","t1","t2","backgroundColor","dotStyle","Boolean","t3","t4","hasSanityPackageInImportMap","Boolean","getSanityImportMapUrl","document","undefined","importMapEntries","querySelectorAll","found","Array","from","some","entry","textContent","importMap","JSON","parse","imports","sanity","getSanityImportMapUrl","checkIsStaging","__SANITY_STAGING__","globalThis","importMapUrl","includes","isStaging","IntrinsicTypeName","ComponentType","SearchOperatorType","Operator","OperatorDivider","OperatorItem","TOperators","type","name","SearchFilterBaseDefinition","description","icon","operators","SearchFilterFieldDefinition","fieldType","SearchFilterPinnedDefinition","fieldPath","group","title","SearchFilterDefinition","createFilterDefinitionDictionary","filterDefinitions","SearchFilterDefinitionDictionary","reduce","acc","val","defineSearchFilter","filterDef","defineSearchFilterOperators","getFilterDefinition","definitions","filterName","getSupportedFieldTypes","filterDefs","push","Record","useContext","SearchContext","SearchContextValue","useSearchState","context","undefined","Error","isObjectSchemaType","ObjectField","SchemaType","getSchemaField","schemaType","fieldPath","paths","split","firstPath","field","fields","find","f","name","nextPath","slice","join","type","undefined","WarningOutlineIcon","PreviewValue","SanityDocument","getMissingDocumentFallback","document","Partial","title","String","subtitle","_id","media","Sources","snapshot","original","fallback","EMPTY","key","getPreviewValueWithFallback","SchemaType","Badge","Box","Flex","useMemo","useObservable","styled","DocumentStatus","DocumentStatusIndicator","GeneralPreviewLayoutKey","PerspectiveStack","DocumentPreviewPresence","SanityDefaultPreview","getPreviewStateObservable","getPreviewValueWithFallback","useDocumentVersions","getDocumentVersionInfoFromVersions","useDocumentPreviewStore","DocumentPresence","SearchResultItemPreviewProps","documentId","documentType","layout","presence","perspective","variant","schemaType","showBadge","INITIAL_PREVIEW_STATE","snapshot","isLoading","original","SearchResultItemPreviewBox","SearchResultItemPreview","t0","$","_c","t1","undefined","documentPreviewStore","t2","observable","t3","_id","_type","documentStub","t4","versions","t5","versionsInfo","t6","bb0","t7","length","t8","title","t9","draft","published","t10","status","tooltip","fallback","t11","icon","StackablePerspective","SanityDocumentLike","Box","ResponsiveMarginProps","ResponsivePaddingProps","MouseEvent","useCallback","useMemo","useSyncObservable","of","useIntentLink","Tooltip","PreviewCard","GeneralPreviewLayoutKey","useSchema","useTranslation","useValuePreview","useGrantsStore","useDocumentPresence","getPublishedId","useSearchState","SearchResultItemPreview","ItemSelectHandler","item","Pick","SearchResultItemProps","disableIntentLink","documentId","documentType","layout","onClick","e","HTMLElement","onItemSelect","previewPerspective","previewVariant","SearchResultItem","t0","$","_c","rest","schema","t1","get","type","documentPresence","name","t2","t3","t4","id","params","t5","intent","onIntentClick","href","state","t","grantsStore","t6","canDisableAction","checkDocumentPermission","_id","_type","createPermission$","createPermission","hasCreatePermission","granted","t7","disabledDocumentIds","some","includes","existsInRelease","disabledAction","t8","documentStub","t9","enabled","schemaType","value","perspectiveStack","variant","preview","t10","title","handleClick","t11","undefined","t12","t13","t14","t15","pointerEvents","opacity","t16","t17","t18","content","t19","tooltipContent","t20","studioTheme","IS_MAC","window","test","navigator","platform","DEBUG_FRAGMENT","DEBUG_MODE","SEARCH_LIMIT","GLOBAL_SEARCH_KEY","GLOBAL_SEARCH_KEY_MODIFIER","POPOVER_INPUT_PADDING","space","POPOVER_MAX_HEIGHT","POPOVER_MAX_WIDTH","POPOVER_VERTICAL_MARGIN","POPOVER_RADIUS","isReferenceSchemaType","CrossDatasetType","ObjectSchemaType","SchemaType","ReferenceSearchSpec","targetType","leafPath","weight","mapWith","PREVIEW_FIELD_WEIGHT_MAP","Record","title","subtitle","description","DEFAULT_PREVIEW_SELECT_WEIGHT","CACHE","WeakMap","Map","getTypeChain","type","isStringField","jsonType","isPtField","of","some","arrayMemberType","name","isSlugField","isSchemaType","input","findFieldType","fieldName","chainType","fields","length","field","find","undefined","ResolvedLeaf","resolveLeaf","segments","depth","maxDepth","head","rest","fieldType","resolved","ReferenceBoundary","targetTypes","leafSegments","walkToReference","to","deriveReferenceSearchSpecs","schemaType","cachedByDepth","get","cached","select","preview","byTargetAndLeaf","selectionKey","rawPath","Object","entries","replace","includes","boundary","split","leaf","dedupeKey","existing","set","specs","Array","from","values","WILDCARD_TOKEN","NEGATION_TOKEN","TOKEN_REGEX","isNegationToken","token","trim","at","isPrefixToken","isExactMatchToken","every","character","prefixLast","query","tokens","match","map","finalIncrementalTokenIndex","findLastIndex","finalIncrementalToken","length","join","prefixedTokens","splice","ReferenceSearchSpec","prefixLast","REFERENCE_RESOLVE_LIMIT","ReferenceResolveQuery","query","params","__query","createReferenceResolveQuery","specs","rawQuery","length","undefined","clauses","Array","from","Set","map","spec","matchTarget","mapWith","leafPath","targetType","join","isIndexSegment","isIndexTuple","isKeySegment","isReferenceSchemaType","CrossDatasetType","PathSegment","SchemaType","fromString","pathFromString","fieldNeedsEscape","IMPLICIT_SCHEMA_TYPE_FIELDS","CompileFieldPathOptions","strict","orderingName","silent","warnedMessages","Set","resetCompileFieldPathWarningCache","clear","reportError","message","Error","has","add","console","warn","formatOrderingLabel","compileFieldPath","schemaType","fieldPath","options","segments","length","compiled","compileSegments","path","Required","Pick","head","rest","undefined","typeLabel","name","type","schemaField","fields","find","field","includes","joinTail","validFields","map","join","nextSegment","hasArrayAccessor","compileFieldContinuation","jsonType","members","Array","isArray","of","accessor","_key","tail","slice","memberType","emittedSoFar","fieldType","probeOptions","const","refType","to","inner","out","seg","compileFieldPath","CompileFieldPathOptions","SearchSort","CompiledSortEntry","expression","projectionIndex","compileSortExpression","searchSort","index","options","field","schemaType","CrossDatasetType","SchemaType","SearchConfiguration","SlugSchemaType","toString","pathToString","isRecord","SearchPath","SearchSpec","SearchWeightEntry","path","weight","type","CACHE","WeakMap","PREVIEW_FIELD_WEIGHT_MAP","title","subtitle","description","BASE_WEIGHTS","Record","Omit","_id","_type","ignoredBuiltInObjectTypes","getTypeChain","isPtField","jsonType","of","some","arrType","name","isStringField","schemaType","isSlugField","typeChain","isSearchConfiguration","options","search","isSchemaType","input","getFullyQualifiedPath","join","getLeafWeights","maxDepth","getWeight","traverse","depth","accumulator","push","recursiveResult","t","fields","length","includes","field","filter","Boolean","arrayItemType","reduce","acc","getUserSetWeight","searchOptions","map","find","getHiddenWeight","hidden","getDefaultWeights","result","getPreviewWeights","isCrossDataset","select","preview","selectionKeysBySelectionPath","Object","fromEntries","entries","selectionKey","selectionPath","replace","defaultWeights","nestedWeightsBySelectionPath","previewFieldName","nested","DeriveSearchWeightsFromTypeOptions","processPaths","paths","deriveSearchWeightsFromType2024","cached","get","userSetWeights","hiddenWeights","previewWeights","weights","typeName","set","ClientPerspective","SanityClient","CrossDatasetType","SanityDocumentLike","SchemaType","SearchStrategy","Observable","ORDERINGS_PROJECTION_KEY","SearchTerms","filter","params","Record","query","types","Type","SearchPath","weight","path","mapWith","SearchSpec","typeName","paths","SearchStory","score","why","SearchHit","hit","WeightedHit","resultIndex","stories","SearchFactoryOptions","maxDepth","tag","unique","strategy","perspective","variant","WeightedSearchResults","type","hits","nextCursor","Groq2024SearchResults","SearchStrategyFactory","client","commonOpts","searchTerms","searchOpts","SearchOptions","TResult","comments","skipSortByScore","sort","SearchSort","cursor","limit","isCrossDataset","queryType","SortDirection","direction","field","schemaType","projectionIndex","nulls","ORDERINGS_PROJECTION_KEY","SearchSort","getSortTarget","ordering","projectionIndex","undefined","field","getNullSortingPrefix","direction","nulls","dirLower","toLowerCase","needsOverride","target","wrapFieldWithFn","mapWith","toOrderClause","orderBy","flatMap","nullPrefix","fieldClause","map","str","trim","filter","Boolean","join","DEFAULT_MAX_FIELD_DEPTH","CrossDatasetType","GlobalDocumentReferenceType","SchemaType","groupBy","compileSortExpression","CompiledSortEntry","deriveSearchWeightsFromType2024","prefixLast","toOrderClause","ORDERINGS_PROJECTION_KEY","SearchFactoryOptions","SearchOptions","SearchSort","SearchTerms","SearchParams","Record","__types","__limit","__query","FINDABILITY_MVI","DEFAULT_LIMIT","SearchQuery","query","params","options","sortOrder","compiledSortEntries","isSchemaType","maybeSchemaType","ReferenceSearchOptions","referenceIds","referenceWeight","createSearchQuery","searchTerms","searchParams","perspective","variant","sort","isCrossDataset","tag","maxDepth","cursor","limit","comments","filter","hasReferenceIds","Array","isArray","length","specs","types","map","schemaType","processPaths","paths","weight","flattenedSpecs","flatMap","typeName","path","groupedSpecs","entry","join","baseMatch","referenceBoost","score","Object","entries","some","JSON","stringify","concat","inputSortOrder","field","direction","isScored","index","projectionIndex","unscoredMatch","filters","flat","orderingsExpressions","expression","orderingsProjection","projection","rawQuery","finalParams","type","name","__rawQuery","__refIds","pragma","s","SanityDocumentLike","CompiledSortEntry","ORDERINGS_PROJECTION_KEY","SearchSort","SortDirection","getNextCursor","lastResult","sortOrder","compiledSortEntries","undefined","hasIdSort","some","field","fullSortOrder","concat","direction","reduce","cursor","sortEntry","index","nextPredicate","slice","map","previousSortEntry","previousIndex","getCursorPredicate","filter","predicate","join","segment","sortComparators","Record","asc","desc","sort","lastEntry","comparator","compiled","value","readOrderingsValue","projectionIndex","expression","JSON","stringify","orderings","Array","isArray","getPublishedId","DEFAULT_MAX_FIELD_DEPTH","CrossDatasetType","SanityDocumentLike","SchemaType","catchError","map","mergeMap","Observable","of","deriveReferenceSearchSpecs","Groq2024SearchResults","SearchStrategyFactory","SearchTerms","createReferenceResolveQuery","createSearchQuery","getNextCursor","getSearchTerms","searchParams","types","query","length","createGroq2024Search","typesFromFactory","client","factoryOptions","search","searchOptions","searchTerms","mergedOptions","rawQuery","referenceSpecs","flatMap","schemaType","maxDepth","maxReferenceWeight","reduce","highest","spec","Math","max","weight","runMainSearch","referenceIds","params","options","sortOrder","compiledSortEntries","referenceWeight","observable","fetch","pipe","hits","hasNextPage","limit","lastResult","at","type","const","hit","slice","__limit","nextCursor","undefined","resolveQuery","tag","perspective","variant","resolvedIds","publishedIds","Array","from","Set","filter","resolvedId","SanityDocumentLike","compact","intersection","keyBy","partition","toLower","union","uniq","words","SearchSpec","WeightedHit","SearchScore","calculateScore","searchTerms","value","phrases","uniqueSearchPhrases","uniqueSearchWords","partitionAndSanitizeSearchTerms","phraseScore","phraseWhy","calculatePhraseScore","wordScore","wordWhy","calculateWordScore","join","stringify","JSON","applyWeights","searchSpec","hits","terms","specByType","spec","typeName","map","hit","index","typeSpec","_type","stories","paths","pathSpec","idx","path","score","why","weight","totalScore","reduce","acc","rank","resultIndex","length","sanitizedValue","toLowerCase","trim","fieldScore","matchCount","forEach","term","includes","uniqueSearchTerms","uniqueValueTerms","matches","all","searchPhrases","searchWords","test","stripWrappingQuotes","str","replace","CrossDatasetType","SchemaType","SearchConfiguration","SlugSchemaType","toString","pathToString","isRecord","SearchPath","SearchSpec","SearchWeightEntry","path","weight","type","CACHE","WeakMap","PREVIEW_FIELD_WEIGHT_MAP","title","subtitle","description","BASE_WEIGHTS","Record","Omit","_id","_type","ignoredBuiltInObjectTypes","getTypeChain","isPtField","jsonType","of","some","arrType","name","isStringField","schemaType","isSlugField","typeChain","isSearchConfiguration","options","search","isSchemaType","input","getFullyQualifiedPath","join","getLeafWeights","maxDepth","getWeight","traverse","depth","accumulator","push","recursiveResult","t","fields","length","includes","field","filter","Boolean","arrayItemType","reduce","acc","getUserSetWeight","searchOptions","map","find","getHiddenWeight","hidden","getDefaultWeights","result","getPreviewWeights","isCrossDataset","select","preview","selectionKeysBySelectionPath","Object","fromEntries","entries","selectionKey","selectionPath","replace","defaultWeights","nestedWeightsBySelectionPath","previewFieldName","nested","DeriveSearchWeightsFromTypeOptions","processPaths","paths","deriveSearchWeightsFromType","cached","get","userSetWeights","hiddenWeights","previewWeights","weights","typeName","mapWith","set","DEFAULT_MAX_FIELD_DEPTH","CrossDatasetType","SchemaType","compact","flatten","flow","toLower","trim","union","uniq","words","compileSortExpression","deriveSearchWeightsFromType","toOrderClause","ORDERINGS_PROJECTION_KEY","SearchFactoryOptions","SearchOptions","SearchPath","SearchSort","SearchSpec","SearchTerms","FINDABILITY_MVI","SearchParams","__types","__limit","key","SearchQuery","query","params","options","Record","searchSpec","terms","DEFAULT_LIMIT","combinePaths","paths","pathWithMapper","mapWith","path","createConstraints","specs","combinedSearchPaths","map","configForType","opt","constraints","_term","i","joinedPath","filter","constraint","length","join","SPECIAL_CHARS","STRIP_EDGE_CHARS","tokenize","string","match","token","replace","extractTermsFromQuery","quotedQueries","unquotedQuery","push","quotedTerms","str","remainingTerms","createSearchQuery","searchTerms","searchOpts","tag","maxDepth","isCrossDataset","perspective","variant","sort","limit","comments","types","schemaType","filters","Boolean","selections","skipSortByScore","spec","typeName","undefined","selection","cfg","inputSortOrder","field","direction","compiledSortEntries","entry","index","resolvedSortOrder","projectionIndex","orderingsExpressions","expression","orderingsProjection","baseProjectionFields","projection","groqComments","concat","s","updatedQuery","toGroqParams","reduce","acc","term","CrossDatasetType","SanityDocumentLike","SchemaType","sortBy","map","tap","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","versionedClient","removeDupes","variantApiVersion","SearchStrategyFactory","SearchTerms","WeightedSearchResults","applyWeights","createSearchQuery","getSearchTerms","searchParams","types","query","length","createWeightedSearch","client","factoryOptions","search","searchOptions","searchTerms","params","options","searchSpec","terms","apiVersion","variant","perspective","undefined","observable","fetch","pipe","unique","hits","skipSortByScore","hit","score","type","SearchStrategy","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","versionedClient","variantApiVersion","Groq2024SearchResults","SearchStrategyFactory","WeightedSearchResults","createGroq2024Search","createWeightedSearch","searchStrategies","groqLegacy","groq2024","Record","DEFAULT_SEARCH_STRATEGY","createSearch","searchableTypes","client","options","factory","strategy","apiVersion","variant","perspective","undefined","SearchTerms","hasSearchableTerms","allowEmptyQueries","terms","hasQuery","query","length","hasFilter","filter","hasSelectedTypes","types","ObjectSchemaType","Schema","SchemaType","isNonNullable","isDocumentType","type","Boolean","name","isObjectType","jsonType","isIgnoredType","startsWith","getSearchableTypes","schema","explicitlyAllowedTypes","getTypeNames","map","typeName","get","filter","includes","ObjectSchemaType","Schema","SchemaType","getSearchableTypes","getSelectableOmnisearchTypes","schema","typeFilter","getSearchableOmnisearchTypes","filter","type","inTypeFilter","sort","sortTypes","__experimental_omnisearch_visibility","a","b","title","name","localeCompare","toLowerCase","includes","SanityClient","DEFAULT_MAX_FIELD_DEPTH","isFinite","useMemo","useObservable","Observable","of","catchError","map","shareReplay","startWith","useClient","DEFAULT_STUDIO_CLIENT_OPTIONS","useWorkspace","DEFAULT_API_FIELD_DEPTH","PartialIndexSettings","partialIndexSettings","maxFieldDepth","Settings","isLoading","settings","INITIAL_LOADING_STATE","fetchMaxDepth","client","projectId","dataset","config","observable","request","uri","tag","cachedSettings","Map","useSearchMaxFieldDepth","overrideClient","$","_c","isEnabled","search","unstable_partialIndexing","enabled","workspaceClient","t0","set","has","pipe","t1","get","_temp","_temp2","indexSettingsObservable","indexSettings","Math","min","err","console","error","Schema","isEqual","useCallback","useMemo","useState","useObservableEvent","concat","EMPTY","iif","Observable","of","timer","catchError","debounce","distinctUntilChanged","filter","map","scan","switchMap","tap","useClient","SearchHit","SearchOptions","SearchTerms","createSearch","DEFAULT_STUDIO_CLIENT_OPTIONS","useWorkspace","SearchState","hasSearchableTerms","getSearchableOmnisearchTypes","useSearchMaxFieldDepth","SearchRequest","debounceTime","options","terms","DEFAULT_DEBOUNCE_TIME","INITIAL_SEARCH_STATE","error","hits","loading","query","types","nonNullable","v","T","NonNullable","sanitizeRequest","request","trim","useSearch","t0","$","_c","allowEmptyQueries","initialState","onComplete","onError","onStart","schema","searchState","setSearchState","client","maxFieldDepth","strategy","search","t1","tag","unique","maxDepth","t2","inputValue$","pipe","_temp","request_0","t3","nextCursor","undefined","_temp2","handleQueryChange","searchRequest","handleSearch","t4","prevState","nextState","SchemaType","TFunction","DEFAULT_AVAILABLE_CHARS","getDocumentTypesTruncated","availableCharacters","types","remainingCount","length","visibleTypes","reduce","remaining","acc","val","index","title","typeTitle","push","map","documentTypesTruncated","t","key","count","formatParams","style","type","schemaType","name","Box","css","styled","CustomTextInputBox","$background","$smallClearButton","theme","sanity","color","card","disabled","bg2","TextInput","ComponentProps","RefAttributes","CustomTextInputBox","CustomTextInputProps","$background","$smallClearButton","CustomTextInput","props","$","_c","ref","rest","t0","t1","ToggleArrowRightIcon","Box","Flex","Text","ReactNode","useCallback","useEffect","useState","styled","DetailsProps","children","margin","marginX","marginY","marginTop","marginRight","marginBottom","marginLeft","open","icon","title","HeaderButton","button","ToggleArrow","props","Header","IconBox","Details","$","_c","openProp","restProps","t0","undefined","setOpen","t1","Symbol","for","_temp","handleToggle","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","v","CompatibleStudioAppId","AppIdCache","get","args","projectId","appIdFetcher","AppIdFetcher","Promise","createAppIdCache","appIdCache","key","cacheElement","error","console","undefined","ReactNode","useContext","useMemo","AppIdCacheContext","AppIdCache","createAppIdCache","AppIdCacheProviderProps","children","AppIdCacheProvider","props","$","_c","parentCache","t0","cache","t1","useAppIdCache","Error","checkStudioManifestExists","studioHostUrl","Promise","url","response","fetch","method","status","console","error","e","SanityClient","isStaging","checkStudioManifestExists","StudioAppResponse","id","title","type","urlType","appHost","StudioApp","studioUrl","CompatibleStudioAppId","appId","studioApps","internalUrlSuffix","fetchStudiosWithUrl","client","projectId","internalSuffix","apps","request","method","url","map","app","getStudioUrl","fetchCreateCompatibleAppId","args","fallbackOrigin","checkStudioManifest","studioHost","Promise","origin","window","location","appsWithStudioUrl","appMatchingOrigin","find","startsWith","manifest","appMatchingFallback","useEffect","useMemo","useState","useClient","useSource","AppIdCache","AppIdFetcher","useAppIdCache","CompatibleStudioAppId","fetchCreateCompatibleAppId","ResolvedStudioApp","loading","studioApp","useStudioAppIdStore","config","$","_c","t0","Symbol","for","apiVersion","client","cache","projectId","t1","fallbackStudioOrigin","pId","fallbackOrigin","appIdFetcher","t2","enabled","useStudioAppIdStoreInner","props","setLoading","setStudioApp","mounted","getAppId","entry","get","undefined","catch","console","error","SearchOperatorBase","SearchOperatorButtonValue","SearchOperatorInput","SearchOperatorParams","SearchOperatorDefinition","buttonValueComponent","TValue","groqFilter","params","initialValue","inputComponent","type","createOperatorDefinitionDictionary","operatorDefinitions","SearchOperatorDefinitionDictionary","reduce","acc","val","getOperatorDefinition","operators","operatorType","undefined","getOperatorInitialValue","Record","SchemaType","intersection","isEmpty","isNonNullable","SearchFieldDefinition","SearchFieldDefinitionDictionary","getFilterDefinition","OperatorItem","SearchFilterDefinition","SearchFilterDefinitionDictionary","getOperatorDefinition","SearchOperatorDefinitionDictionary","SearchFilter","buildSearchFilter","filterDefinition","fieldId","filterName","name","operatorType","operators","find","operator","type","generateFilterQuery","fieldDefinitions","filterDefinitions","filters","operatorDefinitions","filter","validateFilter","map","groqFilter","fieldPath","resolveFieldPath","value","join","getFieldFromFilter","fields","undefined","getFilterKey","narrowDocumentTypes","types","selectedDocumentTypes","filteredDocumentTypes","Object","values","field","includes","id","documentTypes","length","intersectingDocumentTypes","push","sort","fieldDefinition","filterDef","operatorDef","fieldDef","hasFilterValue","Card","Flex","useGlobalKeyDown","useLayer","isHotkey","ReactNode","useCallback","useEffect","useState","FocusLock","styled","POPOVER_INPUT_PADDING","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","FilterPopoverWrapperProps","anchorElement","HTMLElement","children","onClose","isEscape","MAX_HEIGHT","HiddenOverlay","div","FilterPopoverWrapper","t0","$","_c","isTopLayer","t1","event","handleGlobalKeyDown","popoverOffset","usePopoverOffset","t2","t3","t4","maxHeight","zIndex","t5","t6","t7","calcPopoverOffset","element","rect","getBoundingClientRect","offset","y","height","setOffset","handleWindowResize","window","addEventListener","removeEventListener","SearchIcon","Box","Flex","ChangeEvent","RefAttributes","styled","useTranslation","useSearchState","CustomTextInput","FilterPopoverContentHeaderProps","ariaInputLabel","onChange","e","HTMLInputElement","onClear","typeFilter","SearchHeaderBox","theme","sanity","color","base","border","SearchHeaderContentFlex","FilterPopoverContentHeader","t0","$","_c","ref","state","t1","fullscreen","t","t2","t3","t4","t5","Schema","SchemaType","ButtonTone","difference","startCase","TFunction","isNonNullable","SearchFieldDefinition","SearchFieldDefinitionDictionary","getFilterDefinition","SearchFilterDefinition","SearchFilterDefinitionDictionary","SearchFilterPinnedDefinition","FilterMenuItem","FilterMenuItemFilter","FilterMenuItemHeader","SearchFilter","buildSearchFilter","getFieldFromFilter","createFilterMenuItems","documentTypesNarrowed","fieldDefinitions","filterDefinitions","schema","titleFilter","types","t","fieldFilters","Object","values","filter","fieldDef","includesTitleInFieldDefinition","map","filterDef","filterName","id","pinnedItems","buildPinnedMenuItems","length","filterGroup","filters","headerTitle","buildFieldMenuItemsNarrowed","tone","header","title","type","filterItems","fieldDefinition","filterDefinition","group","sharedFilters","sharesDocumentTypes","sharedItems","groupedItems","documentType","docType","get","name","sort","a","b","localeCompare","flatMap","groupFilters","includesDocumentTypes","ungroupedPinnedFilters","isPinnedFilterDefWithoutGroup","includesTitleInPinnedFilterDefinition","groupedPinnedFilters","isPinnedFilterDefWithGroup","reduce","Record","acc","val","push","entries","groupTitle","documentTypes","some","includes","field","currentTitle","fieldTitle","titlePath","join","toLowerCase","useMemo","useSearchState","getFilterDefinition","SearchFilter","getFieldFromFilter","FilterTitleProps","filter","maxLength","FilterTitle","t0","$","_c","state","t1","definitions","t2","bb0","t3","filters","filterName","filterDef","type","t4","fields","fieldDefinition","titlePath","length","title","slice","UnknownIcon","useSearchState","getFilterDefinition","SearchFilter","FilterIconProps","filter","FilterIcon","t0","$","_c","state","t1","definitions","t2","filters","filterName","icon","Icon","t3","Symbol","for","ChevronRightIcon","Box","Flex","Stack","Text","Fragment","useSearchState","SearchFilter","getFieldFromFilter","FilterTitle","FilterIcon","FilterDetailsProps","filter","FilterDetails","t0","$","_c","state","t1","definitions","T0","t2","t3","fields","fieldDefinition","titlePath","length","slice","map","pathTitle","index","opacity","paddingLeft","paddingRight","t4","Symbol","for","flexShrink","t5","t6","t7","t8","isValidElement","renderToString","sanitizeFieldValue","name","React","JSX","Element","stripHtmlTags","err","console","warn","str","DOMParser","parseFromString","body","textContent","Card","Flex","Stack","Text","startCase","uniq","Tooltip","TextWithTone","useSchema","useTranslation","EMPTY_ARRAY","isNonNullable","truncateString","useSearchState","SearchFieldDefinition","SearchFilterDefinition","getSchemaField","sanitizeFieldValue","FilterTooltipProps","children","React","JSX","Element","fieldDefinition","filterDefinition","visible","MAX_VISIBLE_TYPES","FilterTooltip","t0","$","_c","state","t1","documentTypesNarrowed","t","schema","T0","T1","T2","t2","t3","t4","t5","t6","t7","t8","t9","length","fieldDefinitionDocumentTypeTitles","documentTypes","map","d","defType","get","title","name","filter","sort","fieldDefinitionDescription","t10","fieldPath","t11","d_0","defType_0","field","type","description","descriptions","uniqueDescriptions","Symbol","for","maxWidth","fontFamily","slice","join","t12","t13","t14","Box","Button","ResponsiveMarginProps","ResponsivePaddingProps","memo","useCallback","useSearchState","FilterMenuItemFilter","getFilterKey","FilterDetails","FilterTooltip","FilterMenuItemProps","item","onClose","MenuItemFilter","t0","$","_c","rest","dispatch","state","t1","filters","t2","filter","type","handleClick","t3","t4","f","find","isAlreadyActive","tooltipEnabled","fieldDefinition","filterDefinition","description","undefined","t5","Symbol","for","position","whiteSpace","width","t6","tone","t7","t8","t9","t10","Box","Card","Text","memo","FilterMenuItemHeader","MenuItemHeaderFields","item","MenuItemHeader","t0","$","_c","t1","tone","t2","title","t3","Box","Flex","Text","ChangeEvent","useCallback","useMemo","useState","CommandList","CommandListGetItemDisabledCallback","CommandListRenderItemCallback","useSchema","useTranslation","useSearchState","FilterMenuItem","getFilterKey","FilterPopoverContentHeader","createFilterMenuItems","MenuItemFilter","MenuItemHeader","AddFilterPopoverContentProps","onClose","POPOVER_STYLES","width","AddFilterPopoverContent","t0","$","_c","inputElement","setInputElement","titleFilter","setTitleFilter","t","t1","Symbol","for","e","currentTarget","value","handleFilterChange","t2","handleFilterClear","schema","state","t3","documentTypesNarrowed","definitions","filters","terms","t4","types","t5","fields","fieldDefinitions","filterDefinitions","filteredMenuItems","t6","item","type","renderItem","t7","index","filterItem","find","f","filter","getItemDisabled","t8","index_0","menuItem","group","join","title","getItemKey","t9","t10","t11","length","count","t12","t13","t14","AddIcon","useClickOutsideEvent","useCallback","useRef","useState","Button","Popover","useTranslation","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","useSearchState","FilterPopoverWrapper","AddFilterPopoverContent","AddFilterButton","$","_c","open","setOpen","buttonElement","setButtonElement","popoverRef","t","state","t0","fullscreen","t1","Symbol","for","handleClose","t2","handleOpen","t3","current","t4","t5","t6","t7","t8","t9","t10","Card","Stack","Code","useSearchState","DebugDocumentTypesNarrowed","$","_c","state","t0","documentTypesNarrowed","t1","Symbol","for","t2","whiteSpace","t3","length","join","t4","Card","Stack","Code","useSearchState","DebugFilterQuery","$","_c","state","t0","terms","t1","filter","t2","Symbol","for","t3","whiteSpace","t4","CheckmarkIcon","SchemaType","Box","ResponsiveMarginProps","ResponsivePaddingProps","memo","useCallback","Button","useSearchState","DocumentTypeFilterItemProps","selected","type","DocumentTypeFilterItem","TypeFilterItem","t0","$","_c","rest","dispatch","t1","schemaType","handleTypeAdd","t2","handleTypeRemove","t3","handleClick","t4","title","name","t5","t6","t7","t8","t9","Schema","SchemaType","Box","Flex","Stack","Text","MenuDivider","partition","ChangeEvent","useCallback","useMemo","useRef","useState","styled","Button","CommandList","CommandListGetItemSelectedCallback","CommandListHandle","CommandListRenderItemCallback","useSchema","useTranslation","useSearchState","DocumentTypeMenuItem","getSelectableOmnisearchTypes","FilterPopoverContentHeader","DocumentTypeFilterItem","ClearButtonBox","theme","sanity","color","base","border","POPOVER_STYLES","width","DocumentTypesPopoverContent","$","_c","inputElement","setInputElement","typeFilter","setTypeFilter","commandListRef","t","schema","dispatch","state","t0","terms","t1","types","selectedTypes","selectedTypesSnapshot","setSelectedTypesSnapshot","documentTypeItems","useGetDocumentTypeItems","t2","Symbol","for","e","currentTarget","value","handleFilterChange","t3","handleFilterClear","t4","type","current","focusInputElement","scrollToIndex","handleTypesClear","t5","index","virtualItem","title","item","name","getItemKey","renderItem","_temp","t6","index_0","item_0","getItemDisabled","t7","index_1","item_1","selected","getItemSelected","t8","t9","t10","length","t11","filter","t12","t13","t14","ClearButton","onClick","items","itemsSelected","itemsUnselected","includes","hasSelectedItems","hasUnselectedItems","push","forEach","ChevronDownIcon","Placement","useClickOutsideEvent","useCallback","useMemo","useRef","useState","Button","Popover","useTranslation","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","useSearchState","documentTypesTruncated","FilterPopoverWrapper","DocumentTypesPopoverContent","FALLBACK_PLACEMENTS","DocumentTypesButton","$","_c","open","setOpen","buttonElement","setButtonElement","popoverRef","state","t0","fullscreen","terms","t1","types","t","t2","Symbol","for","handleClose","t3","handleOpen","t4","current","t5","title","t6","t7","t8","t9","t10","t11","Box","Flex","useMemo","styled","TextWithTone","useTranslation","Translate","TranslateComponentMap","TFunction","isRecord","useSearchState","getOperatorDefinition","SearchFilter","SearchFilterValues","FilterTitle","FilterLabelProps","filter","fontSize","showContent","CustomBox","$flexShrink","FilterLabel","t0","$","_c","t1","t2","undefined","t","state","t3","definitions","fullscreen","t4","operators","operatorType","operator","ButtonValue","buttonValueComponent","filterValue","value","t5","t6","t7","children","t8","children_0","Field","Operator","Value","components","descriptionKey","console","warn","t9","t10","getFilterValues","t11","values","count","isStringOrNumber","from","to","Card","Stack","Code","useSearchState","SearchFilter","getFieldFromFilter","DebugDocumentTypesProps","filter","DebugDocumentTypes","t0","$","_c","state","t1","definitions","t2","fields","T0","T1","T2","t10","t3","t4","t5","t6","t7","t8","t9","fieldDefinition","Symbol","for","whiteSpace","documentTypes","length","join","t11","t12","t13","Card","Stack","Code","useSearchState","SearchFilter","getFieldFromFilter","DebugFilterValuesProps","filter","DebugFilterValues","t0","$","_c","state","t1","definitions","t2","fields","fieldDefinition","t3","Symbol","for","t4","fieldPath","t5","whiteSpace","t6","filterName","t7","t8","operatorType","t9","t10","value","JSON","stringify","t11","t12","ErrorOutlineIcon","Box","Flex","ResponsivePaddingProps","Stack","TextWithTone","useTranslation","FilterError","props","$","_c","t","t0","Symbol","for","t1","t2","t3","t4","t5","t6","ChevronDownIcon","Inline","Menu","MenuDivider","useCallback","useId","Button","MenuButton","MenuItem","useTranslation","useSearchState","getFilterDefinition","getOperatorDefinition","SearchOperatorDefinition","SearchFilter","getFilterKey","OperatorsMenuButtonProps","filter","operator","CustomMenuItem","t0","$","_c","onClick","selected","t1","type","handleClick","t","t2","nameKey","t3","icon","t4","OperatorsMenuButton","menuButtonId","dispatch","state","T0","T1","T2","definitions","filters","operators","Symbol","for","bb0","operatorItems","filterName","t5","operatorType","filterKey","length","t6","t7","item","index","menuOperator","name","map","placement","constrainSize","portal","radius","t8","TrashIcon","Box","Card","Flex","Stack","Text","ErrorInfo","useCallback","useState","FocusLock","Button","ErrorBoundary","supportsTouch","useSearchState","getFilterDefinition","getOperatorDefinition","SearchFilter","getFieldFromFilter","getFilterKey","FilterDetails","FilterError","OperatorsMenuButton","FilterFormProps","filter","ErrorParams","error","Error","info","FilterForm","t0","$","_c","errorParams","setErrorParams","dispatch","state","t1","definitions","fullscreen","t2","filters","filterName","filterDefinition","t3","operators","operatorType","operator","t4","fields","fieldDefinition","t5","filterKey","t6","type","handleClose","t7","value","handleValueChange","t8","Symbol","for","params","handleCatchError","Component","inputComponent","t9","t10","t11","content","t12","t13","description","t14","t15","t16","Flex","styled","DEBUG_MODE","SearchFilter","DebugDocumentTypes","DebugFilterValues","FilterForm","FilterPopoverContentProps","filter","ContainerFlex","FilterPopoverContent","t0","$","_c","t1","t2","t3","CloseIcon","Button","Card","rem","useClickOutsideEvent","KeyboardEvent","useCallback","useRef","useState","styled","Popover","useTranslation","POPOVER_RADIUS","POPOVER_VERTICAL_MARGIN","useSearchState","SearchFilter","getFilterKey","validateFilter","FilterLabel","FilterPopoverWrapper","FilterPopoverContent","FilterButtonProps","filter","initialOpen","CloseButton","theme","sanity","radius","CloseCard","ContainerDiv","div","LabelButton","FilterButton","t0","$","_c","open","setOpen","buttonElement","setButtonElement","popoverRef","dispatch","state","t1","definitions","fullscreen","t","t2","Symbol","for","handleClose","t3","handleOpen","t4","filterKey","type","handleRemove","t5","event","includes","key","handleKeyDown","t6","current","t7","fields","filters","operators","fieldDefinitions","filterDefinitions","operatorDefinitions","isValid","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","Flex","useCallback","useEffect","useState","Button","useTranslation","DEBUG_MODE","useSearchState","getFilterKey","AddFilterButton","DebugDocumentTypesNarrowed","DebugFilterQuery","DocumentTypesButton","FilterButton","Filters","t0","$","_c","showTypeFilter","t1","undefined","dispatch","state","t2","filters","fullscreen","lastAddedFilter","terms","t3","types","t","isMounted","setIsMounted","t4","type","handleClear","clearFiltersButtonVisible","length","t5","t6","Symbol","for","t7","lastAddedFilterKey","t8","t9","t10","clearFiltersButton","t11","t12","map","filter","key","t13","t14","t15","t16","t17","t18","t19","ArrowLeftIcon","ControlsIcon","SearchIcon","SpinnerIcon","Box","Card","Flex","ChangeEvent","useCallback","useEffect","useRef","RefAttributes","keyframes","styled","Button","StatusButton","useTranslation","useSearchState","hasSearchableTerms","CustomTextInput","rotate","AnimatedSpinnerIcon","FilterDiv","div","SearchHeaderProps","ariaInputLabel","onClose","SearchHeader","t0","$","_c","ref","isMountedRef","t","dispatch","state","t1","filters","filtersVisible","fullscreen","result","t2","terms","loading","types","query","t3","hasValidTerms","t4","ariaLabel","t5","type","visible","handleFiltersToggle","t6","e","currentTarget","value","handleQueryChange","t7","handleQueryClear","t8","t9","t10","t11","Symbol","for","current","notificationBadgeVisible","length","t12","t13","t14","content","t15","t16","t17","t18","t19","t20","context","undefined","t21","useGlobalKeyDown","useLayer","isHotkey","useCallback","GLOBAL_SEARCH_KEY","isSearchHotKey","isEscape","useSearchHotkeys","t0","$","_c","open","onClose","onOpen","isTopLayer","t1","handleClose","t2","event","preventDefault","handleGlobalKeyDown","ReactNode","useCallback","useEffect","useRef","useSearchState","useSearchHotkeys","SearchWrapperProps","children","hasValidTerms","onClose","onOpen","open","SearchWrapper","t0","$","_c","isMountedRef","dispatch","searchCommandList","setOnClose","state","t1","result","t2","index","getTopIndex","type","handleClose","t3","t4","t5","t6","t7","loaded","current","t8","t9","t10","t11","Symbol","for","ArrayDefinition","ObjectDefinition","Schema","SchemaTypeDefinition","StringDefinition","startCase","sanitizeFieldValue","getSearchableOmnisearchTypes","getSupportedFieldTypes","SearchFilterDefinition","MAX_OBJECT_TRAVERSAL_DEPTH","SearchFieldDefinition","documentTypes","fieldPath","filterName","id","name","title","titlePath","type","SearchFieldDefinitionDictionary","Record","createFieldDefinitions","schema","filterDefinitions","searchableDocumentTypeNames","map","s","objectTypes","_original","types","filter","t","isNotTypeNotIgnored","isDocumentObjectDefinition","includes","startsWith","reduce","acc","schemaType","isObjectDefinition","supportedFieldTypes","getDocumentFieldDefinitions","createFieldDefinitionDictionary","fieldDefinitions","val","generateFieldId","field","join","supportedFieldTypeSet","Set","addFieldDefinitionRecursive","defType","depth","documentType","prevFieldPath","prevTitlePath","isInternalField","existingObject","existingDocument","inlineObject","targetObject","fields","has","push","resolveFilterName","Array","Object","values","documentFields","documentField","addFieldDefinitionId","consolidatedFieldDefinitionMap","Map","fieldDefinitionWithId","consolidated","get","set","consolidatedFieldDefinitions","from","sort","sortFieldDefinitions","isArrayOfPrimitives","isArrayDefinition","of","every","item","options","list","length","isStringDefinition","isStringListDefinition","some","find","a","b","localeCompare","slice","useCallback","useMemo","useSyncObservable","merge","Subject","map","startWith","tap","useClient","useKeyValueStore","DEFAULT_STUDIO_CLIENT_OPTIONS","RECENT_SEARCH_VERSION","STORED_SEARCHES_NAMESPACE","StoredSearch","version","recentSearches","defaultValue","useStoredSearch","$","_c","keyValueStore","client","t0","config","dataset","keyValueStoreKey","t1","Symbol","for","optimisticWrites$","t2","getKey","pipe","raw","data","setKey","_temp","value$","value","t3","newValue","next","set","t4","raw_0","data_0","ObjectSchemaType","Schema","isEqual","omit","useMemo","useSchema","SearchTerms","useSource","createFieldDefinitionDictionary","createFieldDefinitions","SearchFieldDefinitionDictionary","createFilterDefinitionDictionary","SearchFilterDefinitionDictionary","createOperatorDefinitionDictionary","SearchOperatorDefinitionDictionary","SearchFilter","validateFilter","getSearchableOmnisearchTypes","useStoredSearch","MAX_RECENT_SEARCHES","RECENT_SEARCH_VERSION","RecentSearch","__recent","index","timestamp","filters","RecentSearchesStore","addSearch","searchTerm","getRecentSearches","removeSearch","removeSearchAtIndex","StoredSearch","version","recentSearches","StoredSearchItem","created","terms","Omit","typeNames","useRecentSearchesStore","$","_c","storedSearch","setStoredSearch","schema","search","t0","operators","t1","t2","t3","t4","fieldDefinitions","filterDefinitions","operatorDefinitions","t5","searchFilters","storedFilters","map","_temp","validStoredFilters","filter","filter_0","newSearchItem","Date","toISOString","query","trim","types","_temp2","newRecent","r","slice","getRecentSearchTerms","newRecent_0","length","newRecent_1","s","name","fieldId","filterName","operatorType","value","_value","sanitizeStoredSearch","studioSchema","getTime","typeName","get","jsonType","searchableTypeNames","filteredSearch","recentSearch","every","includes","newStoredSearch","ControlsIcon","Flex","Inline","Text","useTranslation","Translate","Instructions","$","_c","t","t0","Symbol","for","_temp","t1","padding","defineEvent","RecentSearchClicked","name","version","description","GlobalSearchLatencyMeasuredData","durationMs","queryLength","typeFilterCount","resultCount","strategy","errored","GlobalSearchLatencyMeasured","maxSampleRate","SchemaType","Card","Text","useMemo","useTranslation","documentTypesTruncated","TypePillsProps","availableCharacters","types","DocumentTypesPill","t0","$","_c","t","t1","title","t2","Card","styled","SearchFilter","FilterLabel","FilterPillProps","filter","FilterPillCard","FilterPill","t0","$","_c","t1","ClockIcon","CloseIcon","useTelemetry","Box","Button","Flex","Inline","rem","ResponsiveMarginProps","ResponsivePaddingProps","Text","MouseEvent","useCallback","styled","RecentSearchClicked","useSearchState","RecentSearch","useRecentSearchesStore","DocumentTypesPill","FilterPill","RecentSearchesProps","index","maxVisibleTypePillChars","value","DEFAULT_COMBINED_TYPE_COUNT","RecentSearchItemButton","theme","sanity","radius","SearchItemPillsBox","SearchItemQueryFlex","CloseButtonDiv","div","RecentSearchItem","t0","$","_c","rest","t1","undefined","dispatch","recentSearchesStore","telemetry","availableCharacters","query","length","t2","type","filters","terms","addSearch","log","handleClick","t3","event","stopPropagation","removeSearchAtIndex","handleDelete","t4","Symbol","for","t5","t6","types","t7","map","_temp","t8","t9","t10","t11","t12","t13","filter","i","Box","Card","Text","useMediaIndex","useCallback","useMemo","useRef","styled","Button","CommandList","CommandListHandle","CommandListRenderItemCallback","useTranslation","useSearchState","RecentSearch","useRecentSearchesStore","Instructions","RecentSearchItem","VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT","MAX_COMBINED_TYPE_COUNT_SMALL","MAX_COMBINED_TYPE_COUNT_LARGE","RecentSearchesBox","RecentSearchesProps","inputElement","HTMLInputElement","RecentSearches","t0","$","_c","state","t1","filtersVisible","fullscreen","recentSearchesStore","t2","getRecentSearches","recentSearches","commandListRef","t","t3","removeSearch","current","focusInputElement","handleClearRecentSearchesClick","mediaIndex","maxVisibleTypePillChars","t4","item","t5","virtualIndex","renderItem","hasRecentSearches","length","t6","t7","Container","Stack","Text","useTranslation","NoResults","$","_c","t","t0","t1","t2","t3","t4","WarningOutlineIcon","Box","Flex","TextWithTone","useTranslation","SearchError","$","_c","t","t0","Symbol","for","t1","t2","t3","t4","t5","SearchStrategy","SearchOrdering","getOrderings","context","searchStrategy","Record","createdAsc","ignoreScore","sort","direction","field","titleKey","createdDesc","relevance","customMeasurementLabel","updatedAsc","updatedDesc","SortIcon","Card","Flex","Menu","MenuDivider","isEqual","useCallback","useId","useMemo","styled","Button","MenuButton","MenuItem","useTranslation","useWorkspace","useSearchState","getOrderings","SearchOrdering","SearchDivider","type","SortMenuContentFlex","isSearchDivider","item","CustomMenuItem","t0","$","_c","ordering","t","dispatch","state","t1","currentOrdering","t2","handleClick","t3","isSelected","t4","titleKey","t5","SortMenu","strategy","searchStrategy","search","menuButtonId","orderings","Symbol","for","createdAsc","createdDesc","relevance","updatedAsc","updatedDesc","menuOrderings","T0","T1","T2","T3","t10","t11","t12","t6","t7","t8","t9","bb0","currentMenuItem","find","t13","t14","t15","map","_temp","t16","placement","portal","radius","t17","t18","t19","item_0","index","Card","CardTone","Inline","Stack","Code","styled","Tooltip","WeightedHit","DebugScoreProps","data","DebugScoreCard","DebugOverlay","t0","$","_c","score","tone","T0","T1","t1","t2","stories","matchingStories","filter","_temp","length","map","_temp2","t3","t4","t5","t6","story_0","story","path","why","StackablePerspective","Card","Flex","MouseEvent","useCallback","useDeferredValue","styled","CommandList","CommandListRenderItemCallback","useTranslation","WeightedHit","useSearchState","useRecentSearchesStore","NoResults","SearchError","SortMenu","DebugOverlay","ItemSelectHandler","SearchResultItem","VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT","VIRTUAL_LIST_OVERSCAN","SearchResultsInnerFlex","$loadingFirstPage","SearchResultsProps","disableIntentLink","inputElement","HTMLInputElement","onItemSelect","previewPerspective","previewVariant","SearchResults","t0","$","_c","dispatch","onClose","setSearchCommandList","state","t1","debug","filters","fullscreen","lastActiveIndex","result","terms","cursor","t","recentSearchesStore","deferredHits","hits","isPending","hasSearchResults","length","hasNoSearchResults","loaded","hasError","error","t2","e","addSearch","metaKey","ctrlKey","handleSearchResultClick","t3","type","handleEndReached","t4","item","hit","_id","_type","renderItem","t5","t6","t7","loading","t8","t9","t10","t11","t12","StackablePerspective","Card","Portal","useClickOutsideEvent","useLayer","AnimatePresence","motion","Transition","Variants","useRef","useState","FocusLock","styled","supportsTouch","POPOVER_INPUT_PADDING","POPOVER_MAX_HEIGHT","POPOVER_MAX_WIDTH","POPOVER_RADIUS","useSearchState","hasSearchableTerms","SearchWrapper","Filters","RecentSearches","SearchHeader","ItemSelectHandler","SearchResults","SearchPopoverProps","disableFocusLock","disableIntentLink","onClose","onItemSelect","previewPerspective","previewVariant","onOpen","open","ANIMATION_TRANSITION","duration","type","CARD_VARIANTS","opacity","scale","x","closed","OVERLAY_VARIANTS","Y_POSITION","MotionOverlay","create","SearchMotionCard","SearchPopover","t0","$","_c","inputElement","setInputElement","popoverElement","isTopLayer","zIndex","onSearchClose","state","t1","filtersVisible","terms","t2","hasValidTerms","t3","Symbol","for","current","t4","t5","t6","SearchTerms","RecentSearch","isRecentSearchTerms","terms","__recent","debug","DEBUG_FRAGMENT","rootName","debugWithName","name","Debugger","namespace","enabled","isDebugMode","window","location","hash","slice","split","includes","CurrentUser","SchemaType","SearchStrategy","SearchHit","SearchTerms","removeDupes","RecentSearch","SearchFieldDefinitionDictionary","SearchFilterDefinitionDictionary","getOrderings","getOperatorDefinition","getOperatorInitialValue","SearchOperatorDefinitionDictionary","SearchFilter","SearchOrdering","debugWithName","isDebugMode","generateFilterQuery","getFieldFromFilter","getFilterKey","narrowDocumentTypes","isRecentSearchTerms","sortTypes","PaginationState","cursor","nextCursor","SearchReducerState","currentUser","debug","definitions","SearchDefinitions","documentTypesNarrowed","filters","filtersVisible","fullscreen","lastAddedFilter","lastActiveIndex","ordering","result","SearchResult","terms","strategy","disabledDocumentIds","canDisableAction","fields","operators","error","Error","hasLocal","hits","loaded","loading","InitialSearchState","pagination","initialSearchState","searchStrategy","relevance","query","types","FiltersVisibleSet","type","visible","LastActiveIndexSet","index","PageIncrement","OrderingReset","OrderingSet","SearchClear","SearchRequestComplete","SearchRequestError","SearchRequestStart","TermsFiltersAdd","filter","TermsFiltersClear","TermsFiltersRemove","filterKey","TermsFiltersSetOperator","operatorType","TermsFiltersSetValue","value","TermsQuerySet","TermsSet","TermsTypeAdd","schemaType","TermsTypeRemove","TermsTypesClear","SearchAction","searchReducer","state","action","prefix","startsWith","stripRecent","map","hit","newFilter","fieldDefinitions","filterDefinitions","operatorDefinitions","findIndex","slice","matchedFilter","find","currentOperator","nextOperator","nextInitialValue","initialValue","inputComponentChanged","inputComponent","sort","f","fieldDefinition","documentTypes","length","every","t","s","__recent","rest","useTelemetry","isEqual","ReactNode","useCallback","useEffect","useMemo","useReducer","useRef","useState","SearchContext","CommandListHandle","useSchema","useActiveReleases","SearchHit","SearchTerms","useCurrentUser","useSource","GlobalSearchLatencyMeasured","SEARCH_LIMIT","RecentSearch","createFieldDefinitionDictionary","createFieldDefinitions","createFilterDefinitionDictionary","createOperatorDefinitionDictionary","useSearch","SearchOrdering","validateFilter","hasSearchableTerms","isRecentSearchTerms","initialSearchState","searchReducer","SearchProviderProps","children","fullscreen","disabledDocumentIds","canDisableAction","SearchProvider","t0","$","_c","onClose","setOnClose","searchCommandList","setSearchCommandList","data","releases","schema","currentUser","search","t1","operators","filters","strategy","telemetry","searchStartRef","searchStartTermsRef","t2","t3","t4","t5","fieldDefinitions","filterDefinitions","operatorDefinitions","t6","definitions","fields","pagination","cursor","nextCursor","initialState","state","dispatch","documentTypesNarrowed","currentFilters","ordering","result","terms","isMountedRef","previousOrderingRef","previousCursorRef","previousTermsRef","currentTermsRef","t7","t8","current","t9","searchResult","t0$0","startTerms","type","log","durationMs","performance","now","queryLength","query","length","typeFilterCount","types","resultCount","hits","errored","handleSearchComplete","t10","error","t0_0","startTerms_0","handleSearchError","t11","Symbol","for","currentTerms","handleSearchStart","t12","t13","onComplete","onError","onStart","handleSearch","searchState","t14","hasValidTerms","t15","t16","documentType","get","map","documentTypes","t17","filter","completeFilters","orderingChanged","cursorChanged","termsChanged","sortLabel","customMeasurementLabel","sort","field","direction","options","comments","__recent","index","limit","skipSortByScore","ignoreScore","undefined","perspective","t18","t19","t20","t21","t22","value","t23"],"sources":["../src/core/store/project/useProjectOrganizationId.ts","../src/core/store/renderingContext/useRenderingContext.ts","../src/core/components/previewCard/PreviewCard.tsx","../src/core/components/StatusButton.tsx","../src/core/environment/importMap.ts","../src/core/environment/isStaging.ts","../src/core/studio/components/navbar/search/definitions/filters.ts","../src/core/studio/components/navbar/search/contexts/search/useSearchState.ts","../src/core/studio/components/navbar/search/utils/getSchemaField.ts","../src/core/preview/utils/getPreviewValueWithFallback.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItemPreview.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/SearchResultItem.tsx","../src/core/studio/components/navbar/search/constants.ts","../src/core/search/common/deriveReferenceSearchSpecs.ts","../src/core/search/common/token.ts","../src/core/search/groq2024/createReferenceResolveQuery.ts","../src/core/search/common/compileFieldPath.ts","../src/core/search/common/compileSortExpression.ts","../src/core/search/common/deriveSearchWeightsFromType2024.ts","../src/core/search/common/types.ts","../src/core/search/common/toOrderClause.ts","../src/core/search/groq2024/createSearchQuery.ts","../src/core/search/groq2024/getNextCursor.ts","../src/core/search/groq2024/createGroq2024Search.ts","../src/core/search/weighted/applyWeights.ts","../src/core/search/common/deriveSearchWeightsFromType.ts","../src/core/search/weighted/createSearchQuery.ts","../src/core/search/weighted/createWeightedSearch.ts","../src/core/search/search.ts","../src/core/studio/components/navbar/search/utils/hasSearchableTerms.ts","../src/core/search/common/getSearchableTypes.ts","../src/core/studio/components/navbar/search/utils/selectors.ts","../src/core/studio/components/navbar/search/hooks/useSearchMaxFieldDepth.ts","../src/core/studio/components/navbar/search/hooks/useSearch.ts","../src/core/studio/components/navbar/search/utils/documentTypesTruncated.ts","../src/core/studio/components/navbar/search/components/common/CustomTextInputBox.tsx","../src/core/studio/components/navbar/search/components/common/CustomTextInput.tsx","../src/core/form/components/Details.tsx","../src/core/store/studio-app/appIdCache.ts","../src/core/store/studio-app/AppIdCacheProvider.tsx","../src/core/store/studio-app/checkStudioManifestExists.ts","../src/core/store/studio-app/fetchCreateCompatibleAppId.ts","../src/core/store/studio-app/useStudioAppIdStore.ts","../src/core/util/supportsTouch.ts","../src/core/studio/components/navbar/search/definitions/operators/index.ts","../src/core/studio/components/navbar/search/utils/filterUtils.ts","../src/core/studio/components/navbar/search/components/filters/common/FilterPopoverWrapper.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterPopoverContentHeader.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/createFilterMenuItems.ts","../src/core/studio/components/navbar/search/components/common/FilterTitle.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterIcon.tsx","../src/core/studio/components/navbar/search/components/filters/common/FilterDetails.tsx","../src/core/studio/components/navbar/search/utils/sanitizeField.ts","../src/core/studio/components/navbar/search/components/filters/addFilter/items/FilterTooltip.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/items/MenuItemFilter.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/items/MenuItemHeader.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/AddFilterPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/addFilter/AddFilterButton.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugDocumentTypesNarrowed.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugFilterQuery.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/items/DocumentTypeFilterItem.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/DocumentTypesPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/documentTypes/DocumentTypesButton.tsx","../src/core/studio/components/navbar/search/components/common/FilterLabel.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugDocumentTypes.tsx","../src/core/studio/components/navbar/search/components/filters/debug/_DebugFilterValues.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterError.tsx","../src/core/studio/components/navbar/search/components/filters/filter/OperatorsMenuButton.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterForm.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterPopoverContent.tsx","../src/core/studio/components/navbar/search/components/filters/filter/FilterButton.tsx","../src/core/studio/components/navbar/search/components/filters/Filters.tsx","../src/core/studio/components/navbar/search/components/SearchHeader.tsx","../src/core/studio/components/navbar/search/hooks/useSearchHotkeys.ts","../src/core/studio/components/navbar/search/components/common/SearchWrapper.tsx","../src/core/studio/components/navbar/search/definitions/fields.ts","../src/core/studio/components/navbar/search/datastores/useStoredSearch.ts","../src/core/studio/components/navbar/search/datastores/recentSearches.ts","../src/core/studio/components/navbar/search/components/Instructions.tsx","../src/core/studio/components/navbar/search/__telemetry__/search.telemetry.ts","../src/core/studio/components/navbar/search/components/common/DocumentTypesPill.tsx","../src/core/studio/components/navbar/search/components/common/FilterPill.tsx","../src/core/studio/components/navbar/search/components/recentSearches/item/RecentSearchItem.tsx","../src/core/studio/components/navbar/search/components/recentSearches/RecentSearches.tsx","../src/core/studio/components/navbar/search/components/NoResults.tsx","../src/core/studio/components/navbar/search/components/SearchError.tsx","../src/core/studio/components/navbar/search/definitions/getOrderings.ts","../src/core/studio/components/navbar/search/components/SortMenu.tsx","../src/core/studio/components/navbar/search/components/searchResults/item/DebugOverlay.tsx","../src/core/studio/components/navbar/search/components/searchResults/SearchResults.tsx","../src/core/studio/components/navbar/search/components/SearchPopover.tsx","../src/core/studio/components/navbar/search/utils/isRecentSearchTerms.ts","../src/core/studio/components/navbar/search/utils/debug.ts","../src/core/studio/components/navbar/search/contexts/search/reducer.ts","../src/core/studio/components/navbar/search/contexts/search/SearchProvider.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {map, startWith} from 'rxjs'\n\nimport {useProjectStore} from '../datastores'\n\nconst INITIAL_STATE = {value: null, loading: true}\n\n/**\n * @beta\n * Returns the organization ID for the current project.\n * */\nexport function useProjectOrganizationId(): {value: string | null; loading: boolean} {\n const projectStore = useProjectStore()\n\n const obs$ = useMemo(\n () =>\n projectStore.getOrganizationId().pipe(\n map((res) => {\n return {value: res, loading: false}\n }),\n startWith({value: null, loading: true}),\n ),\n [projectStore],\n )\n\n return useObservable(obs$, INITIAL_STATE)\n}\n","import {useSyncObservable} from 'react-rx'\n\nimport {useRenderingContextStore} from '../datastores'\n\nexport function useRenderingContext() {\n const renderingContextStore = useRenderingContextStore()\n\n // Kept synchronous: the rendering context emits once at boot; deferring\n // only delays consumers reacting to it.\n return useSyncObservable(renderingContextStore.renderingContext)\n}\n","import {Card, type CardProps} from '@sanity/ui'\nimport {type ElementType, type HTMLProps, useContext, useMemo, type RefAttributes} from 'react'\nimport {PreviewCardContext} from 'sanity/_singletons'\nimport {css, styled} from 'styled-components'\n\n/** @internal */\nconst StyledCard = styled(Card)(() => {\n return css`\n /* TextWithTone uses its own logic to set color, and we therefore need */\n /* to override this logic in order to set the correct color in different states */\n &[data-selected],\n &[data-pressed],\n &:active {\n [data-ui='TextWithTone'] {\n color: inherit;\n }\n }\n `\n})\n\n/** @internal */\nexport interface PreviewCardContextValue {\n selected?: boolean\n}\n\n/** @internal */\nexport function usePreviewCard(): PreviewCardContextValue {\n const context = useContext(PreviewCardContext)\n\n if (!context) {\n throw new Error('PreviewCard: missing context value')\n }\n\n return context\n}\n\n/** @internal */\nexport function PreviewCard(\n props: CardProps<ElementType> &\n Omit<HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref'> &\n RefAttributes<HTMLDivElement>,\n) {\n const {ref, children, selected, as, ...restProps} = props\n\n const value = useMemo(() => ({selected}), [selected])\n\n return (\n <StyledCard data-ui=\"PreviewCard\" {...restProps} forwardedAs={as} ref={ref} selected={selected}>\n <PreviewCardContext.Provider value={value}>{children}</PreviewCardContext.Provider>\n </StyledCard>\n )\n}\n\n/**\n * This is a workaround for a circular import issue.\n * Calling `styled(PreviewCard)` at program load time triggered a build error with the commonjs bundle because it tried\n * to access the PreviewCard variable/symbol before it was initialized.\n * The workaround is to colocate the styled component with the component itself.\n * @internal\n */\nexport const ReferenceInputPreviewCard = styled(PreviewCard)`\n /* this is a hack to avoid layout jumps while previews are loading\n there's probably better ways of solving this */\n min-height: 36px;\n`\n","import {type HTMLProps, type ReactNode, useMemo, type RefAttributes} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, type ButtonProps} from '../../ui-components/button/Button'\n\n/** @hidden @beta */\nexport type StatusButtonProps = ButtonProps & {\n ['aria-label']: HTMLProps<HTMLButtonElement>['aria-label']\n 'forwardedAs'?: string\n 'disabled'?: boolean | {reason: ReactNode}\n 'mode'?: ButtonProps['mode']\n 'iconRight'?: undefined\n}\n\nconst StyledButton = styled(Button)`\n position: relative;\n /* The children in button is rendered inside a span, we need to absolutely position it. */\n & > span:nth-child(2) {\n position: absolute;\n top: 6px;\n right: 6px;\n padding: 0;\n }\n`\n\nconst Dot = styled.div({\n width: 4,\n height: 4,\n borderRadius: 3,\n boxShadow: '0 0 0 1px var(--card-bg-color)',\n})\n\n/** @hidden @beta */\nexport function StatusButton(\n props: StatusButtonProps &\n Omit<HTMLProps<HTMLButtonElement>, 'disabled' | 'ref' | 'size' | 'title'> &\n RefAttributes<HTMLButtonElement>,\n) {\n const {\n ref,\n disabled: disabledProp,\n 'aria-label': label,\n mode = 'bleed',\n tone,\n // `text` and `icon` stay in `restProps` so the ButtonWithText | IconButton\n // union stays correlated when spread onto the styled component.\n ...restProps\n } = props\n\n const dotStyle = useMemo(() => ({backgroundColor: `var(--card-badge-${tone}-dot-color)`}), [tone])\n const disabled = Boolean(disabledProp)\n\n return (\n <StyledButton\n data-ui=\"StatusButton\"\n {...restProps}\n aria-label={label}\n disabled={disabled}\n mode={mode}\n ref={ref}\n >\n {tone && <Dot style={dotStyle} />}\n </StyledButton>\n )\n}\n","/**\n * Returns whether or not there is a `sanity` entry in an import map in the current document,\n * which usually means that this studio is \"auto updating\".\n * @internal\n */\nexport const hasSanityPackageInImportMap = () => {\n return Boolean(getSanityImportMapUrl())\n}\n\n/**\n * Returns the url of the first `sanity` entry found in an import map in the current document\n * @internal\n */\nexport const getSanityImportMapUrl = () => {\n if (typeof document === 'undefined' || !('querySelectorAll' in document)) {\n return undefined\n }\n const importMapEntries = document.querySelectorAll('script[type=\"importmap\"]')\n let found: string | undefined\n Array.from(importMapEntries).some((entry) => {\n if (!entry.textContent) return false\n const importMap = JSON.parse(entry.textContent)\n const imports = importMap.imports || {}\n if ('sanity' in imports) {\n found = imports.sanity\n return true\n }\n return false\n })\n return found\n}\n","import {getSanityImportMapUrl} from './importMap'\n\nfunction checkIsStaging(): boolean {\n // Check the build-time constant (traditional builds)\n // @ts-expect-error: __SANITY_STAGING__ is a global env variable set by the vite config\n if (typeof __SANITY_STAGING__ !== 'undefined' && __SANITY_STAGING__ === true) {\n return true\n }\n\n // Check the runtime global (set via <script> tag for auto-updating staging deploys).\n // Uses a property access that survives tree-shaking, unlike the bare identifier above.\n // @ts-expect-error: __SANITY_STAGING__ is not in the globalThis type but may be set at runtime\n if (typeof globalThis !== 'undefined' && globalThis.__SANITY_STAGING__ === true) {\n return true\n }\n\n // For auto-updating studios, check if the import map points to the staging CDN\n const importMapUrl = getSanityImportMapUrl()\n if (importMapUrl && importMapUrl.includes('sanity-cdn.work')) {\n return true\n }\n\n return false\n}\n\n/**\n * Whether the current environment is staging.\n *\n * Checks three signals:\n * 1. The `__SANITY_STAGING__` build-time constant (set by Vite's `define` when building with\n * `SANITY_INTERNAL_ENV=staging`). This works for traditionally built studios.\n * 2. The `globalThis.__SANITY_STAGING__` runtime global. This survives tree-shaking (unlike the\n * bare identifier above, which Vite replaces statically) and can be set by injecting a\n * `<script>` tag before the module scripts run - used for auto-updating staging deploys\n * where the studio code is loaded from the production CDN.\n * 3. The import map URL - auto-updating studios load packages from a CDN, and the CDN host\n * encodes the environment (`sanity-cdn.work` for staging, `sanity-cdn.com` for production).\n * Since the import map is how the code gets loaded, it's always available when this runs.\n *\n * @internal\n */\nexport const isStaging: boolean = checkIsStaging()\n","import {type IntrinsicTypeName} from '@sanity/types'\nimport {type ComponentType} from 'react'\n\nimport {type SearchOperatorType} from './operators/defaultOperators'\n\nexport type Operator<TOperators = string> = OperatorDivider | OperatorItem<TOperators>\n\nexport type OperatorDivider = {\n type: 'divider'\n}\n\nexport type OperatorItem<TOperators = string> = {\n name: TOperators\n type: 'item'\n}\n\ninterface SearchFilterBaseDefinition<TOperators> {\n description?: string\n icon: ComponentType\n name: string\n operators: Operator<TOperators>[]\n}\n\nexport interface SearchFilterFieldDefinition<\n TOperators = string,\n> extends SearchFilterBaseDefinition<TOperators> {\n fieldType: IntrinsicTypeName\n type: 'field'\n}\n\nexport interface SearchFilterPinnedDefinition<\n TOperators = string,\n> extends SearchFilterBaseDefinition<TOperators> {\n fieldPath?: string\n group?: string\n title: string\n type: 'pinned'\n}\n\n/**\n * @beta\n */\nexport type SearchFilterDefinition<TOperators = string> =\n | SearchFilterFieldDefinition<TOperators>\n | SearchFilterPinnedDefinition<TOperators>\n\n/**\n * @internal\n */\nexport function createFilterDefinitionDictionary(\n filterDefinitions: SearchFilterDefinition[],\n): SearchFilterDefinitionDictionary {\n return filterDefinitions.reduce<SearchFilterDefinitionDictionary>((acc, val) => {\n acc[val.name] = val\n return acc\n }, {})\n}\n\n/**\n * @alpha\n */\nexport function defineSearchFilter<TOperators = SearchOperatorType>(\n filterDef: SearchFilterDefinition<TOperators>,\n): typeof filterDef {\n return filterDef\n}\n\n/**\n * @alpha\n */\nexport function defineSearchFilterOperators<TOperators = SearchOperatorType>(\n operators: Operator<TOperators>[],\n): typeof operators {\n return operators\n}\n\nexport function getFilterDefinition(\n definitions: SearchFilterDefinitionDictionary,\n filterName: string,\n): SearchFilterDefinition | undefined {\n return definitions[filterName]\n}\n\n// TODO: we'll need to add field type to pinned filters, in order to properly infer\n// supported field types in the event all field filters are disabled / override\nexport function getSupportedFieldTypes(filterDefs: SearchFilterDefinition[]): string[] {\n return filterDefs.reduce<string[]>((acc, val) => {\n if (val.type === 'field') {\n acc.push(val.fieldType)\n }\n return acc\n }, [])\n}\n\n/**\n * @internal\n */\nexport type SearchFilterDefinitionDictionary = Record<\n SearchFilterDefinition['name'],\n SearchFilterDefinition\n>\n","import {useContext} from 'react'\nimport {SearchContext} from 'sanity/_singletons'\n\nimport {type SearchContextValue} from './SearchContext'\n\n/**\n * @internal\n */\nexport function useSearchState(): SearchContextValue {\n const context = useContext(SearchContext)\n\n if (context === undefined) {\n throw new Error('useSearchState must be used within an SearchProvider')\n }\n return context\n}\n","import {isObjectSchemaType, type ObjectField, type SchemaType} from '@sanity/types'\n\nexport function getSchemaField(schemaType: SchemaType, fieldPath: string): ObjectField | undefined {\n const paths = fieldPath.split('.')\n const firstPath = paths[0]\n if (firstPath && isObjectSchemaType(schemaType)) {\n const field = schemaType.fields.find((f) => f.name === firstPath)\n if (field) {\n const nextPath = paths.slice(1).join('.')\n if (nextPath) {\n return getSchemaField(field.type, nextPath)\n }\n return field\n }\n }\n return undefined\n}\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {type PreviewValue, type SanityDocument} from '@sanity/types'\n\nfunction getMissingDocumentFallback(document: Partial<SanityDocument> | PreviewValue) {\n return {\n title: <em>{document.title ? String(document.title) : 'Missing document'}</em>,\n subtitle: (\n <em>\n {document.title ? `Missing document ID: ${document._id}` : `Document ID: ${document._id}`}\n </em>\n ),\n media: () => <WarningOutlineIcon />,\n }\n}\n\n/**\n * @internal\n */\nexport type Sources = {\n /**\n * Preview snapshot with current perspective applied\n * This takes priority of original and fallback\n */\n snapshot?: Partial<SanityDocument> | PreviewValue | null | undefined\n /**\n * Preview of the original document (e.g. without current perspective applied)\n */\n original?: Partial<SanityDocument> | PreviewValue | null | undefined\n /**\n * last resort fallback in case we don't have anything to preview\n * this can be a hard-coded preview value, or a document stub\n */\n fallback?: Partial<SanityDocument> | PreviewValue\n}\n\nconst EMPTY: {[key: string]: never} = {}\n\n/**\n * Obtain document preview values used in <SanityPreview> and <SanityDefaultPreview> components.\n * Also displays fallback values if the document cannot be found.\n *\n * @internal\n */\nexport function getPreviewValueWithFallback({snapshot, original, fallback}: Sources) {\n return snapshot || original || getMissingDocumentFallback(fallback || EMPTY)\n}\n","import {type SchemaType} from '@sanity/types'\nimport {Badge, Box, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {styled} from 'styled-components'\n\nimport {DocumentStatus} from '../../../../../../../components/documentStatus/DocumentStatus'\nimport {DocumentStatusIndicator} from '../../../../../../../components/documentStatusIndicator/DocumentStatusIndicator'\nimport {type GeneralPreviewLayoutKey} from '../../../../../../../components/previews/types'\nimport {type PerspectiveStack} from '../../../../../../../perspective/types'\nimport {DocumentPreviewPresence} from '../../../../../../../presence/DocumentPreviewPresence'\nimport {SanityDefaultPreview} from '../../../../../../../preview/components/SanityDefaultPreview'\nimport {getPreviewStateObservable} from '../../../../../../../preview/utils/getPreviewStateObservable'\nimport {getPreviewValueWithFallback} from '../../../../../../../preview/utils/getPreviewValueWithFallback'\nimport {useDocumentVersions} from '../../../../../../../releases/hooks/useDocumentVersions'\nimport {getDocumentVersionInfoFromVersions} from '../../../../../../../releases/util/getDocumentVersionInfoFromVersions'\nimport {useDocumentPreviewStore} from '../../../../../../../store/datastores'\nimport {type DocumentPresence} from '../../../../../../../store/presence/types'\n\ninterface SearchResultItemPreviewProps {\n documentId: string\n documentType: string\n layout?: GeneralPreviewLayoutKey\n presence?: DocumentPresence[]\n perspective?: PerspectiveStack\n /**\n * The variant the preview is resolved in, as a bare variant id. Travels with `perspective`.\n */\n variant?: string\n schemaType: SchemaType\n showBadge?: boolean\n}\n\nconst INITIAL_PREVIEW_STATE = {\n snapshot: null,\n isLoading: true,\n original: null,\n}\n\n/**\n * Temporary workaround: force all nested boxes on iOS to use `background-attachment: scroll`\n * to allow <Skeleton> components to render correctly within virtual lists.\n */\nconst SearchResultItemPreviewBox = styled(Box)`\n @supports (-webkit-overflow-scrolling: touch) {\n * [data-ui='Box'] {\n background-attachment: scroll;\n }\n }\n`\n\n/**\n * @internal\n */\nexport function SearchResultItemPreview({\n documentId,\n documentType,\n layout,\n presence,\n schemaType,\n showBadge = true,\n perspective,\n variant,\n}: SearchResultItemPreviewProps) {\n const documentPreviewStore = useDocumentPreviewStore()\n\n const observable = useMemo(() => {\n return getPreviewStateObservable(\n documentPreviewStore,\n schemaType,\n documentId,\n perspective,\n undefined,\n variant,\n )\n }, [documentPreviewStore, schemaType, documentId, perspective, variant])\n\n const documentStub = useMemo(\n () => ({_id: documentId, _type: documentType}),\n [documentId, documentType],\n )\n\n // Deferred: react-rx v5's deferral is identity-coherent, so on a document\n // id change the live snapshot wins and the previous document's title/media\n // never renders next to the new document's version badges.\n const {isLoading, snapshot, original} = useObservable(observable, INITIAL_PREVIEW_STATE)\n\n const {versions} = useDocumentVersions({documentId})\n const versionsInfo = useMemo(() => getDocumentVersionInfoFromVersions(versions), [versions])\n\n const status = useMemo(() => {\n if (isLoading) return null\n return (\n <Flex align=\"center\" gap={3}>\n {presence && presence.length > 0 && <DocumentPreviewPresence presence={presence} />}\n {showBadge && <Badge>{schemaType.title}</Badge>}\n <DocumentStatusIndicator\n draft={versionsInfo.draft}\n published={versionsInfo.published}\n versions={versionsInfo.versions}\n />\n </Flex>\n )\n }, [\n isLoading,\n presence,\n schemaType.title,\n showBadge,\n versionsInfo.draft,\n versionsInfo.published,\n versionsInfo.versions,\n ])\n\n const tooltip = (\n <DocumentStatus\n draft={versionsInfo.draft}\n published={versionsInfo.published}\n versions={versionsInfo.versions}\n />\n )\n\n return (\n <SearchResultItemPreviewBox>\n <SanityDefaultPreview\n {...getPreviewValueWithFallback({snapshot, original, fallback: documentStub})}\n isPlaceholder={isLoading ?? true}\n layout={layout || 'default'}\n icon={schemaType.icon}\n status={status}\n tooltip={tooltip}\n />\n </SearchResultItemPreviewBox>\n )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {type SanityDocumentLike} from '@sanity/types'\nimport {Box, type ResponsiveMarginProps, type ResponsivePaddingProps} from '@sanity/ui'\nimport {type MouseEvent, useCallback, useMemo} from 'react'\nimport {useSyncObservable} from 'react-rx'\nimport {of} from 'rxjs'\nimport {useIntentLink} from 'sanity/router'\n\nimport {Tooltip} from '../../../../../../../../ui-components/tooltip/Tooltip'\nimport {PreviewCard} from '../../../../../../../components/previewCard/PreviewCard'\nimport {type GeneralPreviewLayoutKey} from '../../../../../../../components/previews/types'\nimport {useSchema} from '../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useValuePreview} from '../../../../../../../preview/useValuePreview'\nimport {useGrantsStore} from '../../../../../../../store/datastores'\nimport {useDocumentPresence} from '../../../../../../../store/presence/useDocumentPresence'\nimport {getPublishedId} from '../../../../../../../util/draftUtils'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {SearchResultItemPreview} from './SearchResultItemPreview'\n\nexport type ItemSelectHandler = (item: Pick<SanityDocumentLike, '_id' | '_type' | 'title'>) => void\n\ninterface SearchResultItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n disableIntentLink?: boolean\n documentId: string\n documentType: string\n layout?: GeneralPreviewLayoutKey\n onClick?: (e: MouseEvent<HTMLElement>) => void\n onItemSelect?: ItemSelectHandler\n previewPerspective?: StackablePerspective[]\n /**\n * The variant the result previews are resolved in, as a bare variant id.\n */\n previewVariant?: string\n}\n\nexport function SearchResultItem({\n disableIntentLink,\n documentId,\n documentType,\n layout,\n onClick,\n onItemSelect,\n previewPerspective,\n previewVariant,\n ...rest\n}: SearchResultItemProps) {\n const schema = useSchema()\n const type = schema.get(documentType)\n const documentPresence = useDocumentPresence(documentId)\n const params = useMemo(\n () => ({id: getPublishedId(documentId), type: type?.name}),\n [documentId, type?.name],\n )\n\n const {onClick: onIntentClick, href} = useIntentLink({\n intent: 'edit',\n params,\n })\n const {state} = useSearchState()\n const {t} = useTranslation()\n const grantsStore = useGrantsStore()\n\n const createPermission$ = useMemo(\n () =>\n state.canDisableAction\n ? grantsStore.checkDocumentPermission('create', {_id: documentId, _type: documentType})\n : of(null),\n [documentId, documentType, grantsStore, state.canDisableAction],\n )\n // Kept synchronous: this gates `disabledAction` together with the live\n // `documentId` release-membership check, so a deferred snapshot on a\n // recycled row could leave the new document actionable with the previous\n // row's granted permission.\n const createPermission = useSyncObservable(createPermission$, null)\n const hasCreatePermission = createPermission?.granted\n\n // the current search result exists in the release provided by the search provider\n const existsInRelease = state.disabledDocumentIds?.some((id) =>\n id.includes(getPublishedId(documentId)),\n )\n // should the search items be disasabled\n const disabledAction = (!hasCreatePermission && state.canDisableAction) || existsInRelease\n\n const documentStub = useMemo(\n () => ({_id: documentId, _type: documentType}),\n [documentId, documentType],\n )\n const preview = useValuePreview({\n enabled: true,\n schemaType: type,\n value: documentStub,\n perspectiveStack: previewPerspective,\n variant: previewVariant,\n })\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n onItemSelect?.({_id: documentId, _type: documentType, title: preview.value?.title})\n if (!disableIntentLink) {\n onIntentClick(e)\n }\n onClick?.(e)\n },\n [preview, onItemSelect, documentId, documentType, disableIntentLink, onClick, onIntentClick],\n )\n\n if (!type) return null\n\n const content = (\n <Box {...rest}>\n <PreviewCard\n as={disabledAction ? undefined : 'a'}\n data-as=\"a\"\n flex={1}\n href={disabledAction || disableIntentLink ? undefined : href}\n onClick={handleClick}\n radius={2}\n tabIndex={-1}\n style={{\n pointerEvents: disabledAction ? 'none' : undefined,\n opacity: disabledAction ? 0.5 : 1,\n }}\n >\n <SearchResultItemPreview\n documentId={documentId}\n documentType={documentType}\n layout={layout}\n perspective={previewPerspective}\n variant={previewVariant}\n presence={documentPresence}\n schemaType={type}\n />\n </PreviewCard>\n </Box>\n )\n\n const tooltipContent = existsInRelease\n ? t('release.action.already-exists-in-release')\n : t('release.action.permission.error')\n\n return disabledAction ? (\n <Tooltip content={tooltipContent} placement=\"top\">\n {content}\n </Tooltip>\n ) : (\n content\n )\n}\n","import {studioTheme} from '@sanity/ui'\n\nconst IS_MAC =\n typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform)\n\n// Enable debug mode when the current URL contains the below fragment.\n// Must be prefixed with `_debug_`\nexport const DEBUG_FRAGMENT = '_debug_search_score'\n\n// Display debug filter information: shared document types and field values\nexport const DEBUG_MODE = false\n\n// Max number of records to fetch per search request - intentionally set high to workaround\n// current limitations with studio search config\nexport const SEARCH_LIMIT = 1000\n\nexport const GLOBAL_SEARCH_KEY = 'k'\nexport const GLOBAL_SEARCH_KEY_MODIFIER = IS_MAC ? 'Cmd' : 'Ctrl'\n\n// oxlint-disable-next-line no-deprecated -- will fix in follow up PR\nexport const POPOVER_INPUT_PADDING = studioTheme.space[4] // px\nexport const POPOVER_MAX_HEIGHT = 735 // px\nexport const POPOVER_MAX_WIDTH = 800 // px\n\n// Custom space between buttons and popover content\nexport const POPOVER_VERTICAL_MARGIN = 5 // px\n\nexport const POPOVER_RADIUS = 3\n","import {\n isReferenceSchemaType,\n type CrossDatasetType,\n type ObjectSchemaType,\n type SchemaType,\n} from '@sanity/types'\n\n/**\n * @internal\n *\n * A searchable leaf on a *referenced* document surfaced in a list preview (e.g.\n * `subtitle: 'author.name'`). Normal search-weight derivation stops at reference\n * boundaries, so these leaves are otherwise unsearchable. We surface them by\n * resolving matching referenced documents up front and boosting the referring\n * documents via `references()` — not by compiling `author->name`, which crashes\n * `groq2024`'s `score()` and forces a non-index-accelerated per-document join.\n */\nexport interface ReferenceSearchSpec {\n targetType: string\n leafPath: string\n weight: number\n mapWith?: 'pt::text'\n}\n\nconst PREVIEW_FIELD_WEIGHT_MAP: Record<string, number> = {\n title: 10,\n subtitle: 5,\n description: 1.5,\n}\n\n// Fallback for custom selection keys (e.g. `authorName`) that aren't title/subtitle/description.\nconst DEFAULT_PREVIEW_SELECT_WEIGHT = 5\n\nconst CACHE = new WeakMap<SchemaType, Map<number, ReferenceSearchSpec[]>>()\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n type ? [type, ...getTypeChain(type.type)] : []\n\nconst isStringField = (type: SchemaType | undefined): boolean => type?.jsonType === 'string'\n\nconst isPtField = (type: SchemaType | undefined): boolean =>\n type?.jsonType === 'array' &&\n type.of.some((arrayMemberType) =>\n getTypeChain(arrayMemberType).some(({name}) => name === 'block'),\n )\n\nconst isSlugField = (type: SchemaType | undefined): boolean =>\n getTypeChain(type).some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction findFieldType(type: SchemaType | undefined, fieldName: string): SchemaType | undefined {\n for (const chainType of getTypeChain(type)) {\n if (chainType.jsonType === 'object' && chainType.fields?.length) {\n const field = chainType.fields.find(({name}) => name === fieldName)\n if (field) {\n return field.type\n }\n }\n }\n return undefined\n}\n\ninterface ResolvedLeaf {\n leafPath: string\n mapWith?: 'pt::text'\n}\n\n// Resolves the leaf path within a referenced document. Bails on a further\n// reference or array so the match stays single-hop and index-accelerated.\nfunction resolveLeaf(\n type: SchemaType | undefined,\n segments: string[],\n depth: number,\n maxDepth: number,\n): ResolvedLeaf | undefined {\n if (type === undefined || depth > maxDepth) {\n return undefined\n }\n\n if (segments.length === 0) {\n if (isPtField(type)) {\n return {leafPath: '', mapWith: 'pt::text'}\n }\n // A slug is searchable on its `.current` string - but only if that field\n // actually resolves, so a custom object named `slug` doesn't emit a dead clause.\n if (isSlugField(type) && isStringField(findFieldType(type, 'current'))) {\n return {leafPath: 'current'}\n }\n if (isStringField(type)) {\n return {leafPath: ''}\n }\n return undefined\n }\n\n const [head, ...rest] = segments\n const fieldType = findFieldType(type, head)\n if (fieldType === undefined || isReferenceSchemaType(fieldType)) {\n return undefined\n }\n\n const resolved = resolveLeaf(fieldType, rest, depth + 1, maxDepth)\n if (resolved === undefined) {\n return undefined\n }\n\n return {\n leafPath: resolved.leafPath === '' ? head : `${head}.${resolved.leafPath}`,\n mapWith: resolved.mapWith,\n }\n}\n\ninterface ReferenceBoundary {\n targetTypes: ObjectSchemaType[]\n leafSegments: string[]\n}\n\nfunction walkToReference(\n type: SchemaType | undefined,\n segments: string[],\n depth: number,\n maxDepth: number,\n): ReferenceBoundary | undefined {\n if (type === undefined || depth > maxDepth || segments.length === 0) {\n return undefined\n }\n\n const [head, ...rest] = segments\n const fieldType = findFieldType(type, head)\n if (fieldType === undefined) {\n return undefined\n }\n\n if (isReferenceSchemaType(fieldType) && 'to' in fieldType) {\n return {targetTypes: fieldType.to, leafSegments: rest}\n }\n\n return walkToReference(fieldType, rest, depth + 1, maxDepth)\n}\n\n/**\n * @internal\n *\n * Derives specs from a type's preview `select` paths that traverse a reference.\n * Only single-hop paths to a searchable leaf are supported; array paths and\n * chained references are skipped.\n */\nexport function deriveReferenceSearchSpecs({\n schemaType,\n maxDepth,\n}: {\n schemaType: SchemaType | CrossDatasetType\n maxDepth: number\n}): ReferenceSearchSpec[] {\n if (!isSchemaType(schemaType)) {\n return []\n }\n\n const cachedByDepth = CACHE.get(schemaType) ?? new Map<number, ReferenceSearchSpec[]>()\n const cached = cachedByDepth.get(maxDepth)\n if (cached) {\n return cached\n }\n\n const select = schemaType.preview?.select\n const byTargetAndLeaf = new Map<string, ReferenceSearchSpec>()\n\n for (const [selectionKey, rawPath] of Object.entries(select ?? {})) {\n // Skip array paths (e.g. `authors.0.name`): arrays of references are unsupported here.\n if (rawPath.replace(/\\.\\d+/g, '[]').includes('[]')) {\n continue\n }\n\n const boundary = walkToReference(schemaType, rawPath.split('.'), 0, maxDepth)\n if (boundary === undefined || boundary.leafSegments.length === 0) {\n continue\n }\n\n const weight = PREVIEW_FIELD_WEIGHT_MAP[selectionKey] ?? DEFAULT_PREVIEW_SELECT_WEIGHT\n\n for (const targetType of boundary.targetTypes) {\n const leaf = resolveLeaf(targetType, boundary.leafSegments, 0, maxDepth)\n if (leaf === undefined || leaf.leafPath === '') {\n continue\n }\n\n const dedupeKey = `${targetType.name}:${leaf.leafPath}`\n const existing = byTargetAndLeaf.get(dedupeKey)\n if (existing === undefined || existing.weight < weight) {\n byTargetAndLeaf.set(dedupeKey, {\n targetType: targetType.name,\n leafPath: leaf.leafPath,\n weight,\n ...(leaf.mapWith ? {mapWith: leaf.mapWith} : {}),\n })\n }\n }\n }\n\n const specs = Array.from(byTargetAndLeaf.values())\n cachedByDepth.set(maxDepth, specs)\n CACHE.set(schemaType, cachedByDepth)\n return specs\n}\n","const WILDCARD_TOKEN = '*'\nconst NEGATION_TOKEN = '-'\nconst TOKEN_REGEX = /(?:[^\\s\"]+|\"[^\"]*\")+/g\n\n/**\n * @internal\n */\nexport function isNegationToken(token: string | undefined): boolean {\n return typeof token !== 'undefined' && token.trim().at(0) === NEGATION_TOKEN\n}\n\n/**\n * @internal\n */\nexport function isPrefixToken(token: string | undefined): boolean {\n return typeof token !== 'undefined' && token.trim().at(-1) === WILDCARD_TOKEN\n}\n\n/**\n * @internal\n */\nexport function isExactMatchToken(token: string | undefined): boolean {\n return [token?.at(0), token?.at(-1)].every((character) => character === '\"')\n}\n\n/**\n * @internal\n */\nexport function prefixLast(query: string): string {\n const tokens = (query.match(TOKEN_REGEX) ?? []).map((token) => token.trim())\n\n const finalIncrementalTokenIndex = tokens.findLastIndex(\n (token) => !isNegationToken(token) && !isExactMatchToken(token),\n )\n\n const finalIncrementalToken = tokens[finalIncrementalTokenIndex]\n\n if (tokens.length === 0) {\n return WILDCARD_TOKEN\n }\n\n if (isPrefixToken(finalIncrementalToken) || typeof finalIncrementalToken === 'undefined') {\n return tokens.join(' ')\n }\n\n const prefixedTokens = [...tokens]\n prefixedTokens.splice(finalIncrementalTokenIndex, 1, `${finalIncrementalToken}${WILDCARD_TOKEN}`)\n return prefixedTokens.join(' ')\n}\n","import {type ReferenceSearchSpec} from '../common/deriveReferenceSearchSpecs'\nimport {prefixLast} from '../common/token'\n\n// Bounds the resolved-id set for very common terms. Reference matching is\n// best-effort: beyond this cap some referring documents silently won't surface.\n// Inlined as a literal because GROQ rejects a parameterised slice bound\n// (\"slicing must use constant numbers\").\nconst REFERENCE_RESOLVE_LIMIT = 1000\n\n/**\n * @internal\n */\nexport interface ReferenceResolveQuery {\n query: string\n params: {__query: string}\n}\n\n/**\n * @internal\n *\n * Builds the phase-one query resolving ids of documents whose preview-referenced\n * leaves match the term. Each clause is an index-accelerated `_type == … && leaf\n * match …`, so no per-document join occurs. Returns `undefined` when there are no\n * specs to resolve.\n */\nexport function createReferenceResolveQuery(\n specs: ReferenceSearchSpec[],\n rawQuery: string,\n): ReferenceResolveQuery | undefined {\n if (specs.length === 0) {\n return undefined\n }\n\n const clauses = Array.from(\n new Set(\n specs.map((spec) => {\n const matchTarget = spec.mapWith ? `${spec.mapWith}(${spec.leafPath})` : spec.leafPath\n return `(_type == \"${spec.targetType}\" && ${matchTarget} match text::query($__query))`\n }),\n ),\n )\n\n return {\n // Slice before projecting `._id`: `..._id[0...n]` binds the slice to the\n // `_id` string and yields `null` per element; `...[0...n]._id` is correct.\n query: `*[${clauses.join(' || ')}][0...${REFERENCE_RESOLVE_LIMIT}]._id`,\n params: {\n __query: prefixLast(rawQuery),\n },\n }\n}\n","import {\n isIndexSegment,\n isIndexTuple,\n isKeySegment,\n isReferenceSchemaType,\n type CrossDatasetType,\n type PathSegment,\n type SchemaType,\n} from '@sanity/types'\nimport {fromString as pathFromString} from '@sanity/util/paths'\n\nimport {fieldNeedsEscape} from '../../util/searchUtils'\n\nconst IMPLICIT_SCHEMA_TYPE_FIELDS = ['_id', '_type', '_createdAt', '_updatedAt', '_rev']\n\n/**\n * @internal\n *\n * Options controlling error reporting behaviour while walking a sort\n * field path against the schema.\n */\nexport interface CompileFieldPathOptions {\n /**\n * When `true`, unknown fields / unsupported path shapes throw. When\n * `false`, they `console.warn` (deduplicated) and the partial result\n * is returned.\n */\n strict?: boolean\n /**\n * Optional human-readable name of the ordering, used in error\n * messages to help developers locate the misconfigured ordering.\n */\n orderingName?: string\n /**\n * Internal flag used while probing multi-target references. When\n * `true`, resolution failures are silent — neither thrown nor\n * warned. Callers use this to try multiple reference targets\n * without surfacing per-target failures.\n *\n * @internal\n */\n silent?: boolean\n}\n\nconst warnedMessages = new Set<string>()\n\n/** @internal */\nexport function resetCompileFieldPathWarningCache(): void {\n warnedMessages.clear()\n}\n\nfunction reportError(message: string, strict: boolean, silent: boolean = false): void {\n if (silent) {\n return\n }\n if (strict) {\n throw new Error(message)\n }\n if (!warnedMessages.has(message)) {\n warnedMessages.add(message)\n console.warn(message)\n }\n}\n\nfunction formatOrderingLabel(orderingName: string | undefined): string {\n return orderingName\n ? `The sort ordering \"${orderingName}\" references`\n : 'A sort ordering references'\n}\n\n/**\n * @internal\n *\n * Compiles a single sort field path against the given schema type\n * into a GROQ expression that can be used inside a projection.\n *\n * Returns the schema-aware GROQ expression as a plain string. Every\n * compiled expression is intended to be projected into the\n * top-level `orderings[N]` array and addressed via that positional\n * index.\n *\n * Examples:\n * - `title` → `title`\n * - `author.name` (where `author` is a reference) → `author->name`\n * - `items[0].value` (where `items[]` is an array of references) →\n * `items[0]->value`\n * - `items[_key==\"abc\"].value` → `items[_key==\"abc\"]->value`\n * - `translations.se` (where `translations` is an object) →\n * `translations.se`\n * - `string::length(title)` → `string::length(title)` (treated as\n * literal GROQ since it isn't a schema-walkable path)\n *\n * If `schemaType` is `undefined` (e.g. cross-dataset, or the field\n * is a built-in like `_id`), the path is treated as a literal GROQ\n * expression — no inference is performed.\n *\n * If a path segment cannot be resolved against the schema, the\n * function reports an error via `reportError` (throwing in strict\n * mode, warning otherwise) and returns the input `fieldPath` as-is.\n */\nexport function compileFieldPath(\n schemaType: SchemaType | CrossDatasetType | undefined,\n fieldPath: string,\n options: CompileFieldPathOptions = {},\n): string {\n const {strict = false, orderingName} = options\n\n if (!fieldPath) {\n return fieldPath\n }\n\n const segments = pathFromString(fieldPath)\n\n // Top-level complex GROQ expressions (e.g. `string::length(title)`,\n // `count(items)`) are parsed as a single segment that doesn't\n // correspond to any schema field. Skip schema walking entirely\n // and treat the expression as literal GROQ.\n if (segments.length === 1 && typeof segments[0] === 'string' && fieldNeedsEscape(fieldPath)) {\n return fieldPath\n }\n\n // Cross-dataset and missing schema types: treat the path as literal\n // GROQ. No inference is possible without a schema to walk.\n if (!schemaType || !('fields' in schemaType)) {\n return fieldPath\n }\n\n const compiled = compileSegments(schemaType, segments, {strict, orderingName})\n\n // Resolution failed; fall back to the literal expression.\n return compiled ?? fieldPath\n}\n\n/**\n * Recursively compiles a parsed path against a schema type, returning\n * the resulting GROQ expression string. Returns `undefined` if the\n * path could not be fully resolved against the schema.\n */\nfunction compileSegments(\n schemaType: SchemaType | CrossDatasetType,\n path: PathSegment[],\n options: Required<Pick<CompileFieldPathOptions, 'strict'>> &\n Pick<CompileFieldPathOptions, 'orderingName' | 'silent'>,\n): string | undefined {\n const [head, ...rest] = path\n if (head === undefined) {\n return ''\n }\n\n // Numeric or keyed-access leading segments are not meaningful at\n // this level: they should always follow a field name.\n if (typeof head !== 'string') {\n reportError(\n `${formatOrderingLabel(options.orderingName)} an invalid path starting with a non-field segment.`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n if (!('fields' in schemaType)) {\n const typeLabel = 'name' in schemaType ? schemaType.name : schemaType.type\n reportError(\n `${formatOrderingLabel(options.orderingName)} the field \"${head}\" on non-object schema type \"${typeLabel}\"`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const schemaField = schemaType.fields.find((field) => field.name === head)\n if (!schemaField) {\n if (IMPLICIT_SCHEMA_TYPE_FIELDS.includes(head)) {\n // Built-in document fields that aren't declared in the schema:\n // treat as a literal field reference and stop walking.\n return joinTail(head, rest)\n }\n const validFields = schemaType.fields.map((field) => field.name).join(', ')\n reportError(\n `${formatOrderingLabel(options.orderingName)} the nonexistent field \"${head}\" on schema type \"${schemaType.name}\". Valid fields are: ${validFields}`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const nextSegment = rest[0]\n const hasArrayAccessor =\n nextSegment !== undefined &&\n (isIndexSegment(nextSegment) || isKeySegment(nextSegment) || isIndexTuple(nextSegment))\n\n if (!hasArrayAccessor) {\n return compileFieldContinuation(head, schemaField.type, rest, options)\n }\n\n // Range slices are not meaningful for ordering.\n if (isIndexTuple(nextSegment)) {\n reportError(\n `${formatOrderingLabel(options.orderingName)} a range slice on \"${head}\" on schema type \"${schemaType.name}\". Range slices are not supported for ordering.`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n if (schemaField.type.jsonType !== 'array') {\n reportError(\n `${formatOrderingLabel(options.orderingName)} array access on non-array field \"${head}\" on schema type \"${schemaType.name}\"`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const members = (\n 'of' in schemaField.type && Array.isArray(schemaField.type.of) ? schemaField.type.of : []\n ) as SchemaType[]\n if (members.length !== 1) {\n reportError(\n `${formatOrderingLabel(options.orderingName)} array access on multi-type array field \"${head}\" on schema type \"${schemaType.name}\". Array ordering requires a single member type.`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const accessor =\n typeof nextSegment === 'number' ? `[${nextSegment}]` : `[_key==\"${nextSegment._key}\"]`\n const tail = rest.slice(1)\n const memberType = members[0]\n\n return compileFieldContinuation(`${head}${accessor}`, memberType, tail, options)\n}\n\n/**\n * After a field (or array-accessed field) has been resolved, decides\n * how to continue compiling the tail of the path:\n *\n * - No tail → emit the field as a leaf.\n * - Reference field → emit `->` and recurse into the target type.\n * - Object field → emit `.` and recurse into the field's type.\n */\nfunction compileFieldContinuation(\n emittedSoFar: string,\n fieldType: SchemaType,\n tail: PathSegment[],\n options: Required<Pick<CompileFieldPathOptions, 'strict'>> &\n Pick<CompileFieldPathOptions, 'orderingName' | 'silent'>,\n): string | undefined {\n if (tail.length === 0) {\n return emittedSoFar\n }\n\n if (isReferenceSchemaType(fieldType) && 'to' in fieldType) {\n // For multi-target references, GROQ's `->` follows the first\n // target whose `_type` matches at runtime. We need to pick a\n // reference target type to walk for schema resolution. Try each\n // target in turn and return the first that successfully compiles.\n //\n // Probe each target silently — a target that doesn't match isn't\n // an error, it just means we should try the next one. If *every*\n // target fails, surface a single resolution error.\n const probeOptions = {\n strict: false as const,\n orderingName: options.orderingName,\n silent: true,\n }\n for (const refType of fieldType.to) {\n const compiled = compileSegments(refType, tail, probeOptions)\n if (compiled !== undefined) {\n return `${emittedSoFar}->${compiled}`\n }\n }\n reportError(\n `${formatOrderingLabel(options.orderingName)} a path that does not resolve against any target type of the multi-target reference at \"${emittedSoFar}\".`,\n options.strict,\n options.silent,\n )\n return undefined\n }\n\n const inner = compileSegments(fieldType, tail, options)\n if (inner === undefined) {\n return undefined\n }\n return `${emittedSoFar}.${inner}`\n}\n\n/**\n * Given a head segment and remaining segments that didn't undergo\n * schema resolution (e.g. for built-in fields), join them into a\n * single GROQ expression. We assume no `->` is needed past this\n * point.\n */\nfunction joinTail(head: string, tail: PathSegment[]): string {\n let out = head\n for (const seg of tail) {\n if (typeof seg === 'string') {\n out += `.${seg}`\n } else if (typeof seg === 'number') {\n out += `[${seg}]`\n } else if (isKeySegment(seg)) {\n out += `[_key==\"${seg._key}\"]`\n } else if (isIndexTuple(seg)) {\n out += `[${seg[0]}...${seg[1]}]`\n }\n }\n return out\n}\n","import {compileFieldPath, type CompileFieldPathOptions} from './compileFieldPath'\nimport {type SearchSort} from './types'\n\n/**\n * @internal\n *\n * Result of compiling a single `SearchSort` into the data needed by\n * the search strategy to project and order on the value.\n */\nexport interface CompiledSortEntry {\n /**\n * The fully-qualified GROQ expression that produces the value to\n * sort on. Inserts `->` for reference traversals inferred from the\n * schema, preserves array indexing and keyed access.\n */\n expression: string\n /**\n * Numeric index into the `orderings` projection array under which\n * the value will be projected. Always defined: every sort entry\n * is projected into `orderings` for a consistent, predictable\n * result shape.\n *\n * The projected value is available at\n * `result.orderings[projectionIndex]`.\n */\n projectionIndex: number\n}\n\n/**\n * @internal\n *\n * Compiles a `SearchSort` into the projection-ready\n * `{ expression, projectionIndex }` shape used by the search\n * strategies.\n *\n * Every entry is projected into the top-level `orderings` array —\n * there is no \"bare\" projection branch. This keeps the result\n * shape predictable and avoids needing to reason about whether a\n * particular sort field is addressable as a bare GROQ identifier.\n *\n * The compiled GROQ expression is produced by walking\n * `searchSort.schemaType` with `compileFieldPath`, which inserts\n * `->` at reference boundaries and preserves array indexing / keyed\n * access. If `searchSort.schemaType` is missing or the path can't be\n * resolved, the original `field` is used as a literal GROQ\n * expression.\n *\n * The compiled `expression` is **not** stored on `SearchSort` itself.\n * Callers thread the array of resolved entries through to anywhere\n * else it's needed (e.g. `getNextCursor`).\n */\nexport function compileSortExpression(\n searchSort: SearchSort,\n index: number,\n options: CompileFieldPathOptions = {},\n): CompiledSortEntry {\n const {field, schemaType} = searchSort\n\n const expression = field ? compileFieldPath(schemaType, field, options) : field\n\n return {\n expression,\n projectionIndex: index,\n }\n}\n","import {\n type CrossDatasetType,\n type SchemaType,\n type SearchConfiguration,\n type SlugSchemaType,\n} from '@sanity/types'\nimport {toString as pathToString} from '@sanity/util/paths'\n\nimport {isRecord} from '../../util/isRecord'\nimport {type SearchPath, type SearchSpec} from './types'\n\ninterface SearchWeightEntry {\n path: string\n weight: number\n type?: 'string' | 'pt'\n}\n\nconst CACHE = new WeakMap<SchemaType | CrossDatasetType, SearchSpec>()\n\nconst PREVIEW_FIELD_WEIGHT_MAP = {\n title: 10,\n subtitle: 5,\n description: 1.5,\n}\nconst BASE_WEIGHTS: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n _id: {weight: 1},\n _type: {weight: 1},\n}\n\n// Any object type whose fields should not be considered for custom weighting.\n//\n// Search may still match on their fields, but will not traverse their schema to find custom\n// weights.\n//\n// Some types, such as `slug`, may instead determine weights using a specialised implementation.\nconst ignoredBuiltInObjectTypes = [\n 'reference',\n 'crossDatasetReference',\n 'slug',\n 'globalDocumentReference',\n]\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n type ? [type, ...getTypeChain(type.type)] : []\n\nconst isPtField = (type: SchemaType | undefined) =>\n type?.jsonType === 'array' &&\n type.of.some((arrType) => getTypeChain(arrType).some(({name}) => name === 'block'))\n\nconst isStringField = (schemaType: SchemaType | undefined): boolean =>\n schemaType ? schemaType?.jsonType === 'string' : false\n\nconst isSlugField = (schemaType: SchemaType | undefined): schemaType is SlugSchemaType => {\n const typeChain = getTypeChain(schemaType)\n return typeChain.some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n}\n\nconst isSearchConfiguration = (options: unknown): options is SearchConfiguration =>\n isRecord(options) && 'search' in options && isRecord(options.search)\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction getFullyQualifiedPath(schemaType: SchemaType, path: string): string {\n // Slug field weights should be applied to the object's `current` field.\n if (isSlugField(schemaType)) {\n return [path, 'current'].join('.')\n }\n\n return path\n}\n\nfunction getLeafWeights(\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n getWeight: (schemaType: SchemaType, path: string) => number | null,\n): Record<string, SearchWeightEntry> {\n function traverse(\n type: SchemaType | undefined,\n path: string,\n depth: number,\n accumulator: SearchWeightEntry[] = [], // use accumulator to avoid stack overflow\n ): SearchWeightEntry[] {\n if (!type) return accumulator\n if (depth > maxDepth) return accumulator\n\n const typeChain = getTypeChain(type)\n\n if (isStringField(type) || isPtField(type)) {\n const weight = getWeight(type, path)\n\n if (typeof weight === 'number') {\n accumulator.push({path, weight})\n }\n return accumulator\n }\n\n if (isSlugField(type)) {\n const weight = getWeight(type, path)\n if (typeof weight === 'number') {\n accumulator.push({\n path: getFullyQualifiedPath(type, path),\n weight,\n })\n }\n return accumulator\n }\n\n let recursiveResult = accumulator\n for (const t of typeChain) {\n if (\n t.jsonType === 'object' &&\n !!t.fields?.length &&\n !ignoredBuiltInObjectTypes.includes(t.name)\n ) {\n for (const field of t.fields) {\n recursiveResult = traverse(\n field.type,\n pathToString([path, field.name].filter(Boolean)),\n depth + 1,\n recursiveResult,\n )\n }\n } else if (t.jsonType === 'array' && !!t.of?.length) {\n for (const arrayItemType of t.of) {\n recursiveResult = traverse(arrayItemType, `${path}[]`, depth + 1, recursiveResult)\n }\n }\n }\n return recursiveResult\n }\n\n // Cross Dataset Reference are not part of the schema, so we should not attempt to reconcile them.\n if (!isSchemaType(schemaType)) {\n return {}\n }\n\n return traverse(schemaType, '', 0).reduce<Record<string, SearchWeightEntry>>(\n (acc, {path, weight, type}) => {\n acc[path] = {weight, type, path}\n return acc\n },\n {},\n )\n}\n\nconst getUserSetWeight = (schemaType: SchemaType) => {\n const searchOptions = getTypeChain(schemaType)\n .map((type) => type.options)\n .find(isSearchConfiguration)\n\n return typeof searchOptions?.search?.weight === 'number' ? searchOptions.search.weight : null\n}\n\nconst getHiddenWeight = (schemaType: SchemaType) => {\n const hidden = getTypeChain(schemaType).some((type) => type.hidden)\n return hidden ? 0 : null\n}\n\nconst getDefaultWeights = (schemaType: SchemaType) => {\n // if there is no user set weight or a `0` weight due to be hidden,\n // then we can return the default weight of `1`\n const result = getUserSetWeight(schemaType) ?? getHiddenWeight(schemaType)\n return typeof result === 'number' ? null : 1\n}\n\nconst getPreviewWeights = (\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n isCrossDataset?: boolean,\n): Record<string, SearchWeightEntry> | null => {\n const select = schemaType?.preview?.select\n if (!select) return null\n\n const selectionKeysBySelectionPath = Object.fromEntries(\n Object.entries(select).map(([selectionKey, selectionPath]) => [\n // replace indexed paths with `[]`\n // e.g. `arrayOfObjects.0.myField` becomes `arrayOfObjects[].myField`\n selectionPath.replace(/\\.\\d+/g, '[]'),\n selectionKey,\n ]),\n )\n\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const nestedWeightsBySelectionPath = Object.fromEntries(\n Object.entries(defaultWeights)\n .map(([path, {type}]) => ({path, type}))\n .filter(({path}) => selectionKeysBySelectionPath[path])\n .map(({path, type}) => [\n path,\n {\n type,\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[\n selectionKeysBySelectionPath[path] as keyof typeof PREVIEW_FIELD_WEIGHT_MAP\n ] ?? 0,\n },\n ]),\n )\n\n if (isCrossDataset) {\n return Object.fromEntries(\n Object.entries(selectionKeysBySelectionPath).map(([path, previewFieldName]) => {\n return [\n path,\n {\n path,\n type: 'string',\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[previewFieldName as keyof typeof PREVIEW_FIELD_WEIGHT_MAP] ??\n 0,\n },\n ]\n }),\n )\n }\n\n return getLeafWeights(schemaType, maxDepth, (type, path) => {\n const nested = nestedWeightsBySelectionPath[getFullyQualifiedPath(type, path)]\n return nested ? nested.weight : null\n })\n}\n\ninterface DeriveSearchWeightsFromTypeOptions {\n schemaType: SchemaType | CrossDatasetType\n maxDepth: number\n isCrossDataset?: boolean\n processPaths?: (paths: SearchPath[]) => SearchPath[]\n}\n\nexport function deriveSearchWeightsFromType2024({\n schemaType,\n maxDepth,\n isCrossDataset,\n processPaths = (paths) => paths,\n}: DeriveSearchWeightsFromTypeOptions): SearchSpec {\n const cached = CACHE.get(schemaType)\n if (cached) return cached\n\n const userSetWeights = getLeafWeights(schemaType, maxDepth, getUserSetWeight)\n const hiddenWeights = getLeafWeights(schemaType, maxDepth, getHiddenWeight)\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const previewWeights = getPreviewWeights(schemaType, maxDepth, isCrossDataset)\n\n const weights: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n ...BASE_WEIGHTS,\n ...defaultWeights,\n ...hiddenWeights,\n ...previewWeights,\n ...userSetWeights,\n }\n\n const result = {\n typeName: isSchemaType(schemaType) ? schemaType.name : schemaType.type,\n paths: processPaths(\n Object.entries(weights).map(([path, {weight}]) => ({\n path,\n weight,\n })),\n ),\n }\n\n CACHE.set(schemaType, result)\n return result\n}\n","import {type ClientPerspective, type SanityClient} from '@sanity/client'\nimport {\n type CrossDatasetType,\n type SanityDocumentLike,\n type SchemaType,\n type SearchStrategy,\n} from '@sanity/types'\nimport {type Observable} from 'rxjs'\n\n/**\n * The top-level projection key under which schema-resolved sort\n * expressions are exposed in search results. Sort values are\n * projected as an array at `orderings`, indexed by\n * `SearchSort.projectionIndex`.\n *\n * @internal\n */\nexport const ORDERINGS_PROJECTION_KEY = 'orderings'\n\n/**\n * @internal\n */\nexport interface SearchTerms<Type extends SchemaType | CrossDatasetType = SchemaType> {\n filter?: string\n params?: Record<string, unknown>\n query: string\n types: Type[]\n}\n\n/**\n * @internal\n */\nexport interface SearchPath {\n weight: number\n path: string\n mapWith?: string\n}\n\n/**\n * @internal\n */\nexport interface SearchSpec {\n typeName: string\n paths: SearchPath[]\n}\n\n/**\n * @internal\n */\nexport interface SearchStory {\n path: string\n score: number\n why: string\n}\n\n/**\n * @internal\n */\nexport interface SearchHit {\n hit: SanityDocumentLike\n}\n\n/**\n * @internal\n */\nexport interface WeightedHit extends SearchHit {\n resultIndex: number\n score: number\n stories: SearchStory[]\n}\n\n/**\n * @internal\n */\nexport interface SearchFactoryOptions {\n maxDepth?: number\n filter?: string\n params?: Record<string, unknown>\n tag?: string\n /* only return unique documents (e.g. not both draft and published) */\n unique?: boolean\n strategy?: SearchStrategy\n perspective?: ClientPerspective\n /**\n * The selected editing variant as a bare variant id. When set, documents are searched as seen\n * through that variant, on top of `perspective`.\n */\n variant?: string\n}\n\n/**\n * @internal\n */\nexport interface WeightedSearchResults {\n type: 'weighted'\n hits: WeightedHit[]\n nextCursor?: never\n}\n\n/**\n * @internal\n */\nexport interface Groq2024SearchResults {\n type: 'groq2024'\n hits: SearchHit[]\n nextCursor?: string\n}\n\n/**\n * @internal\n */\nexport type SearchStrategyFactory<TResult extends WeightedSearchResults | Groq2024SearchResults> = (\n types: (SchemaType | CrossDatasetType)[],\n client: SanityClient,\n commonOpts: SearchFactoryOptions,\n) => (searchTerms: string | SearchTerms, searchOpts?: SearchOptions) => Observable<TResult>\n\n/**\n * @internal\n */\nexport type SearchOptions = {\n maxDepth?: number\n comments?: string[]\n skipSortByScore?: boolean\n sort?: SearchSort[]\n cursor?: string\n limit?: number\n perspective?: ClientPerspective\n /**\n * The selected editing variant as a bare variant id. When set, documents are searched as seen\n * through that variant, on top of `perspective`.\n */\n variant?: string\n isCrossDataset?: boolean\n queryType?: 'prefixLast' | 'prefixNone'\n}\n\n/**\n * @internal\n */\nexport type SortDirection = 'asc' | 'desc'\n\n/**\n * @internal\n */\nexport type SearchSort = {\n direction: SortDirection\n /**\n * The path/expression as authored by the developer (e.g.\n * `arrayOfReferences[0].favoriteBooks[0].title`). Used for stable\n * serialization (settings storage, listen-query SWR keys, etc.).\n * The projected value in result data is addressed via\n * `result.orderings[projectionIndex]`.\n */\n field: string\n /**\n * The schema type that this sort `field` is authored against. The\n * search strategy uses this to resolve the GROQ expression for\n * `field` (e.g. inserting `->` for reference traversals).\n *\n * Required when `field` traverses references, accesses arrays,\n * or otherwise depends on schema-aware compilation. Optional for\n * trivial fields like `_id` / `_createdAt` / `title`, where the\n * `field` value works as a literal GROQ expression.\n */\n schemaType?: SchemaType | CrossDatasetType\n /**\n * Index into the `orderings` projection array at which this\n * entry's value lives in the result. The projected value is\n * available at `result.orderings[projectionIndex]`.\n *\n * Populated by the search strategy after `compileSortExpression`\n * runs — not a caller-facing input. Direct callers of the search\n * strategy should leave this unset.\n */\n projectionIndex?: number\n mapWith?: string\n /**\n * Controls whether null/undefined values appear first or last in the sort order.\n *\n * Defaults match PostgreSQL behavior:\n * - `'desc'` direction → nulls first\n * - `'asc'` direction → nulls last\n *\n * **Note:** Overriding the default may have performance implications for document types\n * with lots of documents.\n */\n nulls?: 'first' | 'last'\n}\n","import {ORDERINGS_PROJECTION_KEY, type SearchSort} from './types'\n\n/**\n * Returns the GROQ expression that addresses the value being sorted\n * on, after the projection has run.\n *\n * Every sort entry is projected into the top-level `orderings`\n * array by `compileSortExpression`, so the address is always\n * `orderings[<projectionIndex>]`.\n *\n * If a caller passes a `SearchSort` without a `projectionIndex`\n * (i.e. one that hasn't been threaded through\n * `compileSortExpression`), this falls back to the literal `field`\n * so that the produced clause is at least syntactically valid.\n */\nfunction getSortTarget(ordering: SearchSort): string {\n if (ordering.projectionIndex === undefined) {\n return ordering.field\n }\n return `${ORDERINGS_PROJECTION_KEY}[${ordering.projectionIndex}]`\n}\n\n/**\n * Returns a `select(defined(...))` expression to override the default null sorting\n * behavior, or undefined if no override is needed.\n *\n * Default behavior (matches PostgreSQL):\n * - `desc` → nulls first\n * - `asc` → nulls last\n *\n * Only generates a prefix when the user explicitly requests the opposite.\n */\nfunction getNullSortingPrefix(ordering: SearchSort): string | undefined {\n const {direction, nulls} = ordering\n\n if (!nulls) return undefined\n\n const dirLower = (direction || 'asc').toLowerCase()\n\n const needsOverride =\n (dirLower === 'desc' && nulls === 'last') || (dirLower === 'asc' && nulls === 'first')\n\n if (!needsOverride) return undefined\n\n const target = getSortTarget(ordering)\n\n // nulls last: defined values sort first (0), nulls sort last (1)\n // nulls first: defined values sort last (1), nulls sort first (0)\n if (nulls === 'last') {\n return `select(defined(${target}) => 0, 1)`\n }\n return `select(defined(${target}) => 1, 0)`\n}\n\nfunction wrapFieldWithFn(ordering: SearchSort): string {\n const target = getSortTarget(ordering)\n return ordering.mapWith ? `${ordering.mapWith}(${target})` : target\n}\n\nexport function toOrderClause(orderBy: SearchSort[]): string {\n return (orderBy || [])\n .flatMap((ordering) => {\n const nullPrefix = getNullSortingPrefix(ordering)\n const fieldClause = [wrapFieldWithFn(ordering), (ordering.direction || '').toLowerCase()]\n .map((str) => str.trim())\n .filter(Boolean)\n .join(' ')\n\n return nullPrefix ? [nullPrefix, fieldClause] : [fieldClause]\n })\n .join(',')\n}\n","import {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {\n type CrossDatasetType,\n type GlobalDocumentReferenceType,\n type SchemaType,\n} from '@sanity/types'\nimport groupBy from 'lodash-es/groupBy.js'\n\nimport {compileSortExpression, type CompiledSortEntry} from '../common/compileSortExpression'\nimport {deriveSearchWeightsFromType2024} from '../common/deriveSearchWeightsFromType2024'\nimport {prefixLast} from '../common/token'\nimport {toOrderClause} from '../common/toOrderClause'\nimport {\n ORDERINGS_PROJECTION_KEY,\n type SearchFactoryOptions,\n type SearchOptions,\n type SearchSort,\n type SearchTerms,\n} from '../common/types'\n\ninterface SearchParams extends Record<string, unknown> {\n __types: string[]\n __limit: number\n __query: string\n}\n\nconst FINDABILITY_MVI = 5\nconst DEFAULT_LIMIT = 1_000\n\ninterface SearchQuery {\n query: string\n params: SearchParams\n options: Record<string, unknown>\n sortOrder: SearchSort[]\n /**\n * Compiled GROQ expressions corresponding to each entry in\n * `sortOrder`. Threaded through to `getNextCursor` so the cursor\n * predicate can address each sort field's source-document value\n * via the schema-resolved expression (e.g. `author->name`) rather\n * than the literal `field` (which would only match the projected\n * shape).\n */\n compiledSortEntries: CompiledSortEntry[]\n}\n\nfunction isSchemaType(\n maybeSchemaType: SchemaType | CrossDatasetType | undefined,\n): maybeSchemaType is SchemaType {\n return typeof maybeSchemaType !== 'undefined' && 'name' in maybeSchemaType\n}\n\n/**\n * @internal\n *\n * Published ids resolved in phase one of the reference search, surfaced via\n * `references()` rather than a `->` dereference (which `score()` rejects).\n */\nexport interface ReferenceSearchOptions {\n referenceIds?: string[]\n referenceWeight?: number\n}\n\n/**\n * @internal\n */\nexport function createSearchQuery(\n searchTerms: SearchTerms<SchemaType | CrossDatasetType | GlobalDocumentReferenceType>,\n searchParams: string | SearchTerms,\n {\n perspective,\n variant,\n sort,\n isCrossDataset,\n tag,\n maxDepth,\n cursor,\n limit,\n params,\n comments,\n filter,\n }: SearchOptions & SearchFactoryOptions = {},\n {referenceIds, referenceWeight = 5}: ReferenceSearchOptions = {},\n): SearchQuery {\n const hasReferenceIds = Array.isArray(referenceIds) && referenceIds.length > 0\n const specs = searchTerms.types\n .map((schemaType) =>\n deriveSearchWeightsFromType2024({\n schemaType,\n maxDepth: maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n isCrossDataset: isCrossDataset,\n processPaths: (paths) => paths.filter(({weight}) => weight !== 1),\n }),\n )\n .filter(({paths}) => paths.length !== 0)\n\n // Note: Computing this is unnecessary when `!isScored`.\n const flattenedSpecs = specs.flatMap(({typeName, paths}) =>\n paths.map((path) => ({...path, typeName})),\n )\n\n // Note: Computing this is unnecessary when `!isScored`.\n const groupedSpecs = groupBy(flattenedSpecs, (entry) => [entry.path, entry.weight].join(':'))\n\n const baseMatch = '([@, _id] match text::query($__query) || references($__rawQuery))'\n\n // `references()` is index-accelerated and accepted by `score()`, unlike `->`.\n const referenceBoost = hasReferenceIds ? [`boost(references($__refIds), ${referenceWeight})`] : []\n\n // Note: Computing this is unnecessary when `!isScored`.\n const score = Object.entries(groupedSpecs)\n .flatMap(([, entries]) => {\n if (entries.some(({weight}) => weight === 0)) {\n return []\n }\n return `boost(_type in ${JSON.stringify(entries.map((entry) => entry.typeName))} && ${entries[0].path} match text::query($__query), ${entries[0].weight})`\n })\n .concat(referenceBoost)\n .concat(baseMatch)\n\n const inputSortOrder = sort ?? [{field: '_score', direction: 'desc'}]\n const isScored = inputSortOrder.some(({field}) => field === '_score')\n\n // Compile each sort entry into its `{expression, projectionIndex}`\n // shape. Every entry is projected into\n // `orderings[<projectionIndex>]` — see `compileSortExpression` for\n // why we always project rather than selectively.\n const compiledSortEntries = inputSortOrder.map((entry, index) =>\n compileSortExpression(entry, index),\n )\n const sortOrder: SearchSort[] = inputSortOrder.map((entry, index) => ({\n ...entry,\n projectionIndex: compiledSortEntries[index].projectionIndex,\n }))\n\n // Unscored has no `[_score > 0]` gate, so the reference match must live in the\n // filter for documents found only through a referenced leaf to surface.\n const unscoredMatch = hasReferenceIds ? `(${baseMatch} || references($__refIds))` : baseMatch\n\n const filters: string[] = [\n '_type in $__types',\n // If the search request doesn't use scoring, directly filter documents.\n isScored ? [] : unscoredMatch,\n filter ? `(${filter})` : [],\n searchTerms.filter ? `(${searchTerms.filter})` : [],\n cursor ?? [],\n ].flat()\n\n const orderingsExpressions = compiledSortEntries.map((entry) => entry.expression)\n const orderingsProjection = `\"${ORDERINGS_PROJECTION_KEY}\": [${orderingsExpressions.join(', ')}]`\n const projection = ['_type', '_id', '_originalId', orderingsProjection].join(', ')\n\n const query = [\n `*[${filters.join(' && ')}]`,\n isScored ? ['|', `score(${score.join(', ')})`] : [],\n isScored ? `[_score > 0]` : [],\n `{${projection}}`,\n ['|', `order(${toOrderClause(sortOrder)})`],\n `[0...$__limit]`,\n ]\n .flat()\n .join(' ')\n\n const rawQuery = typeof searchParams === 'string' ? searchParams : searchParams.query\n\n const finalParams: SearchParams = {\n __types: searchTerms.types.map((type) => (isSchemaType(type) ? type.name : type.type)),\n // Overfetch by 1 to determine whether there is another page to fetch.\n __limit: (limit ?? DEFAULT_LIMIT) + 1,\n __query: prefixLast(rawQuery),\n __rawQuery: rawQuery,\n ...(hasReferenceIds ? {__refIds: referenceIds} : {}),\n ...params,\n }\n\n const pragma = [`findability-mvi:${FINDABILITY_MVI}`]\n .concat(comments || [])\n .map((s) => `// ${s}`)\n .join('\\n')\n\n return {\n query: [pragma, query].join('\\n'),\n options: {\n tag: tag,\n perspective,\n variant,\n },\n params: finalParams,\n sortOrder,\n compiledSortEntries,\n }\n}\n","import {type SanityDocumentLike} from '@sanity/types'\n\nimport {type CompiledSortEntry} from '../common/compileSortExpression'\nimport {ORDERINGS_PROJECTION_KEY, type SearchSort, type SortDirection} from '../common/types'\n\n/**\n * Builds the GROQ cursor predicate that selects documents past the\n * last result of the previous page.\n *\n * The cursor predicate runs against **source documents** in the next\n * query (it's used as a filter, not an `order(...)` argument), so\n * the comparator's left-hand side must be the schema-resolved GROQ\n * expression (e.g. `author->name`), not the projection target\n * (`orderings[0]`). The right-hand side is read from the\n * **projected** last result at\n * `lastResult.orderings[<projectionIndex>]`.\n *\n * `compiledSortEntries`, when provided, is the array of\n * `{ expression, projectionIndex }` returned by\n * `compileSortExpression` for the same sort order. When omitted\n * (direct callers / tests), the function falls back to treating\n * each sort entry's `field` as both the GROQ predicate target and\n * the result-reading key.\n *\n * @internal\n */\nexport function getNextCursor({\n lastResult,\n sortOrder,\n compiledSortEntries,\n}: {\n lastResult?: SanityDocumentLike\n sortOrder: SearchSort[]\n compiledSortEntries?: CompiledSortEntry[]\n}): string | undefined {\n if (!lastResult) {\n return undefined\n }\n\n const hasIdSort = sortOrder.some(({field}) => field === '_id')\n\n const fullSortOrder: SearchSort[] = hasIdSort\n ? sortOrder\n : sortOrder.concat({field: '_id', direction: 'asc'})\n\n return fullSortOrder.reduce<string | undefined>((cursor, sortEntry, index) => {\n const nextPredicate = fullSortOrder\n .slice(0, index)\n .map((previousSortEntry, previousIndex) =>\n getCursorPredicate(\n previousSortEntry,\n lastResult,\n '==',\n compiledSortEntries?.[previousIndex],\n ),\n )\n .concat(getCursorPredicate(sortEntry, lastResult, undefined, compiledSortEntries?.[index]))\n .filter((predicate) => typeof predicate !== 'undefined')\n .join(' && ')\n\n return [cursor, `(${nextPredicate})`]\n .filter((segment) => typeof segment !== 'undefined')\n .join(' || ')\n }, undefined)\n}\n\nconst sortComparators: Record<SortDirection, '>' | '<'> = {\n asc: '>',\n desc: '<',\n}\n\n/**\n * @internal\n *\n * Builds a single comparator predicate for the cursor. The predicate\n * targets the source-document value (via the compiled `expression`),\n * compared against the projected last-result value.\n *\n * When a `compiled` entry is provided, the source-document target is\n * `compiled.expression` and the result-side value is read from\n * `lastEntry.orderings[compiled.projectionIndex]`. When `compiled`\n * is omitted (e.g. the implicit `_id` tiebreaker, or older\n * callers), the predicate falls back to using `sort.field` for\n * both sides.\n */\nexport function getCursorPredicate(\n sort: SearchSort,\n lastEntry: SanityDocumentLike,\n comparator: '>' | '<' | '==' = sortComparators[sort.direction],\n compiled?: CompiledSortEntry,\n): string | undefined {\n if (sort.field === '_id' && comparator === '==') {\n return undefined\n }\n\n if (compiled) {\n const value = readOrderingsValue(lastEntry, compiled.projectionIndex)\n return [compiled.expression, comparator, JSON.stringify(value)].join(' ')\n }\n\n // Fallback for entries without a precomputed compiled value (e.g.\n // the implicit `_id` tiebreaker). The `field` doubles as both the\n // GROQ predicate target and the result-reading key.\n const value = (lastEntry as Record<string, unknown>)[sort.field]\n return [sort.field, comparator, JSON.stringify(value)].join(' ')\n}\n\n/**\n * Read a projected sort value from the last result at\n * `lastEntry.orderings[projectionIndex]`.\n */\nfunction readOrderingsValue(lastEntry: SanityDocumentLike, projectionIndex: number): unknown {\n const orderings = (lastEntry as Record<string, unknown>)[ORDERINGS_PROJECTION_KEY]\n if (!Array.isArray(orderings)) {\n return undefined\n }\n return orderings[projectionIndex]\n}\n","import {getPublishedId} from '@sanity/client/csm'\nimport {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {type CrossDatasetType, type SanityDocumentLike, type SchemaType} from '@sanity/types'\nimport {catchError, map, mergeMap, type Observable, of} from 'rxjs'\n\nimport {deriveReferenceSearchSpecs} from '../common/deriveReferenceSearchSpecs'\nimport {\n type Groq2024SearchResults,\n type SearchStrategyFactory,\n type SearchTerms,\n} from '../common/types'\nimport {createReferenceResolveQuery} from './createReferenceResolveQuery'\nimport {createSearchQuery} from './createSearchQuery'\nimport {getNextCursor} from './getNextCursor'\n\nfunction getSearchTerms(\n searchParams: string | SearchTerms,\n types: (SchemaType | CrossDatasetType)[],\n) {\n if (typeof searchParams === 'string') {\n return {\n query: searchParams,\n types: types,\n }\n }\n return searchParams.types.length ? searchParams : {...searchParams, types}\n}\n\n/**\n * Note: When using the `raw` persepctive, `groq2024` may emit uncollated documents, manifesting as\n * duplicate search results. Consumers must collate the results.\n *\n * @internal\n */\nexport const createGroq2024Search: SearchStrategyFactory<Groq2024SearchResults> = (\n typesFromFactory,\n client,\n factoryOptions,\n) => {\n return function search(searchParams, searchOptions = {}) {\n const searchTerms = getSearchTerms(searchParams, typesFromFactory)\n\n const mergedOptions = {\n ...factoryOptions,\n ...searchOptions,\n }\n\n const rawQuery = typeof searchParams === 'string' ? searchParams : searchParams.query\n\n // Phase-one reference resolution is skipped when there is no term or no\n // reference-traversing preview path, leaving the query identical to a plain search.\n const referenceSpecs = searchTerms.types.flatMap((schemaType) =>\n deriveReferenceSearchSpecs({\n schemaType,\n maxDepth: mergedOptions.maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n }),\n )\n const maxReferenceWeight = referenceSpecs.reduce(\n (highest, spec) => Math.max(highest, spec.weight),\n 0,\n )\n\n const runMainSearch = (referenceIds?: string[]): Observable<Groq2024SearchResults> => {\n const {query, params, options, sortOrder, compiledSortEntries} = createSearchQuery(\n searchTerms,\n searchParams,\n mergedOptions,\n {referenceIds, referenceWeight: maxReferenceWeight},\n )\n\n return client.observable.fetch<SanityDocumentLike[]>(query, params, options).pipe(\n map((hits) => {\n const hasNextPage =\n typeof searchOptions.limit !== 'undefined' && hits.length > searchOptions.limit\n\n // Search overfetches by 1 to determine whether there is another page to fetch. Therefore,\n // the penultimate result must be used to determine the start of the next page.\n const lastResult = hasNextPage ? hits.at(-2) : hits.at(-1)\n\n return {\n type: 'groq2024' as const,\n // Search overfetches by 1 to detect a next page. Slice to the effective\n // limit - falling back to `__limit - 1` when no limit was passed - so the\n // overfetched element never leaks.\n hits: hits.map((hit) => ({hit})).slice(0, searchOptions.limit ?? params.__limit - 1),\n nextCursor: hasNextPage\n ? getNextCursor({lastResult, sortOrder, compiledSortEntries})\n : undefined,\n }\n }),\n )\n }\n\n const resolveQuery = rawQuery\n ? createReferenceResolveQuery(referenceSpecs, rawQuery)\n : undefined\n\n if (resolveQuery === undefined) {\n return runMainSearch()\n }\n\n return client.observable\n .fetch<string[]>(resolveQuery.query, resolveQuery.params, {\n tag: mergedOptions.tag,\n perspective: mergedOptions.perspective,\n variant: mergedOptions.variant,\n })\n .pipe(\n // Reference resolution is an enhancement: if phase one fails, fall back\n // to a plain search rather than failing the base term-match too.\n catchError(() => of<string[]>([])),\n mergeMap((resolvedIds) => {\n // References always point at the published id, so normalise resolved\n // (possibly draft/version) ids before matching with `references()`.\n const publishedIds = Array.from(\n new Set(\n (resolvedIds ?? [])\n .filter((resolvedId): resolvedId is string => typeof resolvedId === 'string')\n .map((resolvedId) => getPublishedId(resolvedId)),\n ),\n )\n return runMainSearch(publishedIds.length > 0 ? publishedIds : undefined)\n }),\n )\n }\n}\n","import {type SanityDocumentLike} from '@sanity/types'\nimport compact from 'lodash-es/compact.js'\nimport intersection from 'lodash-es/intersection.js'\nimport keyBy from 'lodash-es/keyBy.js'\nimport partition from 'lodash-es/partition.js'\nimport toLower from 'lodash-es/toLower.js'\nimport union from 'lodash-es/union.js'\nimport uniq from 'lodash-es/uniq.js'\nimport words from 'lodash-es/words.js'\n\nimport {type SearchSpec, type WeightedHit} from '../common/types'\n\ntype SearchScore = [number, string]\n\n/**\n * Takes a set of terms and a value and returns a [score, story] pair where score is a value between 0, 1 and story is the explanation.\n *\n * @internal\n */\nconst calculateScore = (searchTerms: string[], value: string): SearchScore => {\n // Separate search terms by phrases (wrapped with quotes) and words.\n const {phrases: uniqueSearchPhrases, words: uniqueSearchWords} =\n partitionAndSanitizeSearchTerms(searchTerms)\n\n // Calculate an aggregated score of both phrase and word matches.\n const [phraseScore, phraseWhy] = calculatePhraseScore(uniqueSearchPhrases, value)\n const [wordScore, wordWhy] = calculateWordScore(uniqueSearchWords, value)\n return [phraseScore + wordScore, [wordWhy, phraseWhy].join(', ')]\n}\n\nconst stringify = (value: unknown): string =>\n typeof value === 'string' ? value : JSON.stringify(value)\n\n/**\n * @internal\n */\nexport function applyWeights(\n searchSpec: SearchSpec[],\n hits: SanityDocumentLike[],\n terms: string[] = [],\n): WeightedHit[] {\n const specByType = keyBy(searchSpec, (spec) => spec.typeName)\n return hits.map((hit, index) => {\n const typeSpec = specByType[hit._type]\n const stories = (typeSpec.paths || [])?.map((pathSpec, idx) => {\n const value = stringify(hit[`w${idx}`])\n if (!value) {\n return {path: pathSpec.path, score: 0, why: 'No match'}\n }\n const [score, why] = calculateScore(terms, value)\n return {\n path: pathSpec.path,\n score: score * pathSpec.weight,\n why: `${why} (*${pathSpec.weight})`,\n }\n })\n\n const totalScore = stories.reduce((acc, rank) => acc + rank.score, 0)\n\n return {hit, resultIndex: hits.length - index, score: totalScore, stories: stories}\n })\n}\n/**\n * For phrases: score on the total number of matching characters.\n * E.g. given the phrases [\"the fox\", \"of london\"] for the target value \"the wily fox of london\"\n *\n * - \"the fox\" isn't included in the target value (score: 0)\n * - \"of london\" is included in the target value, and 9 out of 22 characters match (score: 9/22 = ~0.408)\n * - non-exact matches have their score divided in half (final score: ~0.204)\n *\n * @internal\n */\nexport function calculatePhraseScore(uniqueSearchPhrases: string[], value: string): SearchScore {\n const sanitizedValue = value.toLowerCase().trim()\n\n let fieldScore = 0\n let matchCount = 0\n uniqueSearchPhrases.forEach((term) => {\n if (sanitizedValue.includes(term)) {\n fieldScore += term.length / sanitizedValue.length\n matchCount += term.length\n }\n })\n\n return fieldScore === 1\n ? [1, '[Phrase] Exact match']\n : [fieldScore / 2, `[Phrase] Matched ${matchCount} of ${sanitizedValue.length} characters`]\n}\n\n/**\n * For words: score on the total number of matching words.\n * E.g. given the words [\"the\", \"fox\", \"of\", \"london\"] for the target value \"the wily fox of london\"\n *\n * - 4 out of 5 words match (score: 4/5 = 0.8)\n * - non-exact matches have their score divided in half (final score: 0.4)\n *\n * @internal\n */\nexport function calculateWordScore(uniqueSearchTerms: string[], value: string): SearchScore {\n const uniqueValueTerms = uniq(compact(words(toLower(value))))\n\n const matches = intersection(uniqueSearchTerms, uniqueValueTerms)\n const all = union(uniqueValueTerms, uniqueSearchTerms)\n const fieldScore = matches.length / all.length\n return fieldScore === 1\n ? [1, '[Word] Exact match']\n : [\n fieldScore / 2,\n `[Word] Matched ${matches.length} of ${all.length} terms: [${matches.join(', ')}]`,\n ]\n}\n\n/**\n * @internal\n */\nexport function partitionAndSanitizeSearchTerms(searchTerms: string[]): {\n phrases: string[]\n words: string[]\n} {\n const uniqueSearchTerms = uniq(searchTerms.map(toLower))\n\n const [searchPhrases, searchWords] = partition(uniqueSearchTerms, (term) => /^\".*\"$/.test(term))\n return {\n phrases: uniq(searchPhrases).map(toLower).map(stripWrappingQuotes), //\n words: uniq(searchWords.map(toLower)),\n }\n}\n\nfunction stripWrappingQuotes(str: string) {\n return str.replace(/^\"(.*)\"$/, '$1')\n}\n","import {\n type CrossDatasetType,\n type SchemaType,\n type SearchConfiguration,\n type SlugSchemaType,\n} from '@sanity/types'\nimport {toString as pathToString} from '@sanity/util/paths'\n\nimport {isRecord} from '../../util/isRecord'\nimport {type SearchPath, type SearchSpec} from './types'\n\ninterface SearchWeightEntry {\n path: string\n weight: number\n type: 'string' | 'pt'\n}\n\nconst CACHE = new WeakMap<SchemaType | CrossDatasetType, SearchSpec>()\nconst PREVIEW_FIELD_WEIGHT_MAP = {\n title: 10,\n subtitle: 5,\n description: 1.5,\n}\nconst BASE_WEIGHTS: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n _id: {weight: 1, type: 'string'},\n _type: {weight: 1, type: 'string'},\n}\nconst ignoredBuiltInObjectTypes = ['reference', 'crossDatasetReference', 'slug']\n\nconst getTypeChain = (type: SchemaType | undefined): SchemaType[] =>\n type ? [type, ...getTypeChain(type.type)] : []\n\nconst isPtField = (type: SchemaType | undefined) =>\n type?.jsonType === 'array' &&\n type.of.some((arrType) => getTypeChain(arrType).some(({name}) => name === 'block'))\n\nconst isStringField = (schemaType: SchemaType | undefined): boolean =>\n schemaType ? schemaType?.jsonType === 'string' : false\n\nconst isSlugField = (schemaType: SchemaType | undefined): schemaType is SlugSchemaType => {\n const typeChain = getTypeChain(schemaType)\n return typeChain.some(({jsonType, name}) => jsonType === 'object' && name === 'slug')\n}\n\nconst isSearchConfiguration = (options: unknown): options is SearchConfiguration =>\n isRecord(options) && 'search' in options && isRecord(options.search)\n\nfunction isSchemaType(input: SchemaType | CrossDatasetType | undefined): input is SchemaType {\n return typeof input !== 'undefined' && 'name' in input\n}\n\nfunction getFullyQualifiedPath(schemaType: SchemaType, path: string): string {\n // Slug field weights should be applied to the object's `current` field.\n if (isSlugField(schemaType)) {\n return [path, 'current'].join('.')\n }\n\n return path\n}\n\nfunction getLeafWeights(\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n getWeight: (schemaType: SchemaType, path: string) => number | null,\n): Record<string, SearchWeightEntry> {\n function traverse(\n type: SchemaType | undefined,\n path: string,\n depth: number,\n accumulator: SearchWeightEntry[] = [], // use accumulator to avoid stack overflow\n ): SearchWeightEntry[] {\n if (!type) return accumulator\n if (depth > maxDepth) return accumulator\n\n const typeChain = getTypeChain(type)\n\n if (isStringField(type) || isPtField(type)) {\n const weight = getWeight(type, path)\n if (typeof weight === 'number') {\n accumulator.push({path, weight, type: isPtField(type) ? 'pt' : 'string'})\n }\n return accumulator\n }\n\n if (isSlugField(type)) {\n const weight = getWeight(type, path)\n if (typeof weight === 'number') {\n accumulator.push({\n path: getFullyQualifiedPath(type, path),\n weight,\n type: isPtField(type) ? 'pt' : 'string',\n })\n }\n return accumulator\n }\n\n let recursiveResult = accumulator\n for (const t of typeChain) {\n if (\n t.jsonType === 'object' &&\n !!t.fields?.length &&\n !ignoredBuiltInObjectTypes.includes(t.name)\n ) {\n for (const field of t.fields) {\n recursiveResult = traverse(\n field.type,\n pathToString([path, field.name].filter(Boolean)),\n depth + 1,\n recursiveResult,\n )\n }\n } else if (t.jsonType === 'array' && !!t.of?.length) {\n for (const arrayItemType of t.of) {\n recursiveResult = traverse(arrayItemType, `${path}[]`, depth + 1, recursiveResult)\n }\n }\n }\n\n return recursiveResult\n }\n\n // Cross Dataset Reference are not part of the schema, so we should not attempt to reconcile them.\n if (!isSchemaType(schemaType)) {\n return {}\n }\n\n return traverse(schemaType, '', 0).reduce<Record<string, SearchWeightEntry>>(\n (acc, {path, weight, type}) => {\n acc[path] = {weight, type, path}\n return acc\n },\n {},\n )\n}\n\nconst getUserSetWeight = (schemaType: SchemaType) => {\n const searchOptions = getTypeChain(schemaType)\n .map((type) => type.options)\n .find(isSearchConfiguration)\n\n return typeof searchOptions?.search?.weight === 'number' ? searchOptions.search.weight : null\n}\n\nconst getHiddenWeight = (schemaType: SchemaType) => {\n const hidden = getTypeChain(schemaType).some((type) => type.hidden)\n return hidden ? 0 : null\n}\n\nconst getDefaultWeights = (schemaType: SchemaType) => {\n // if there is no user set weight or a `0` weight due to be hidden,\n // then we can return the default weight of `1`\n const result = getUserSetWeight(schemaType) ?? getHiddenWeight(schemaType)\n return typeof result === 'number' ? null : 1\n}\n\nconst getPreviewWeights = (\n schemaType: SchemaType | CrossDatasetType | undefined,\n maxDepth: number,\n isCrossDataset?: boolean,\n): Record<string, SearchWeightEntry> | null => {\n const select = schemaType?.preview?.select\n if (!select) return null\n\n const selectionKeysBySelectionPath = Object.fromEntries(\n Object.entries(select).map(([selectionKey, selectionPath]) => [\n // replace indexed paths with `[]`\n // e.g. `arrayOfObjects.0.myField` becomes `arrayOfObjects[].myField`\n selectionPath.replace(/\\.\\d+/g, '[]'),\n selectionKey,\n ]),\n )\n\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const nestedWeightsBySelectionPath = Object.fromEntries(\n Object.entries(defaultWeights)\n .map(([path, {type}]) => ({path, type}))\n .filter(({path}) => selectionKeysBySelectionPath[path])\n .map(({path, type}) => [\n path,\n {\n type,\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[\n selectionKeysBySelectionPath[path] as keyof typeof PREVIEW_FIELD_WEIGHT_MAP\n ],\n },\n ]),\n )\n\n if (isCrossDataset) {\n return Object.fromEntries(\n Object.entries(selectionKeysBySelectionPath).map(([path, previewFieldName]) => {\n return [\n path,\n {\n path,\n type: 'string',\n weight:\n PREVIEW_FIELD_WEIGHT_MAP[previewFieldName as keyof typeof PREVIEW_FIELD_WEIGHT_MAP],\n },\n ]\n }),\n )\n }\n\n return getLeafWeights(schemaType, maxDepth, (type, path) => {\n const nested = nestedWeightsBySelectionPath[getFullyQualifiedPath(type, path)]\n return nested ? nested.weight : null\n })\n}\n\nexport interface DeriveSearchWeightsFromTypeOptions {\n schemaType: SchemaType | CrossDatasetType\n maxDepth: number\n isCrossDataset?: boolean\n processPaths?: (paths: SearchPath[]) => SearchPath[]\n}\n\nexport function deriveSearchWeightsFromType({\n schemaType,\n maxDepth,\n isCrossDataset,\n processPaths = (paths) => paths,\n}: DeriveSearchWeightsFromTypeOptions): SearchSpec {\n const cached = CACHE.get(schemaType)\n if (cached) return cached\n\n const userSetWeights = getLeafWeights(schemaType, maxDepth, getUserSetWeight)\n const hiddenWeights = getLeafWeights(schemaType, maxDepth, getHiddenWeight)\n const defaultWeights = getLeafWeights(schemaType, maxDepth, getDefaultWeights)\n const previewWeights = getPreviewWeights(schemaType, maxDepth, isCrossDataset)\n\n const weights: Record<string, Omit<SearchWeightEntry, 'path'>> = {\n ...BASE_WEIGHTS,\n ...defaultWeights,\n ...hiddenWeights,\n ...previewWeights,\n ...userSetWeights,\n }\n\n const result = {\n typeName: isSchemaType(schemaType) ? schemaType.name : schemaType.type,\n paths: processPaths(\n Object.entries(weights).map(([path, {type, weight}]) => ({\n path,\n weight,\n ...(type === 'pt' && {mapWith: 'pt::text'}),\n })),\n ),\n }\n\n CACHE.set(schemaType, result)\n return result\n}\n","import {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport {type CrossDatasetType, type SchemaType} from '@sanity/types'\nimport compact from 'lodash-es/compact.js'\nimport flatten from 'lodash-es/flatten.js'\nimport flow from 'lodash-es/flow.js'\nimport toLower from 'lodash-es/toLower.js'\nimport trim from 'lodash-es/trim.js'\nimport union from 'lodash-es/union.js'\nimport uniq from 'lodash-es/uniq.js'\nimport words from 'lodash-es/words.js'\n\nimport {compileSortExpression} from '../common/compileSortExpression'\nimport {deriveSearchWeightsFromType} from '../common/deriveSearchWeightsFromType'\nimport {toOrderClause} from '../common/toOrderClause'\nimport {\n ORDERINGS_PROJECTION_KEY,\n type SearchFactoryOptions,\n type SearchOptions,\n type SearchPath,\n type SearchSort,\n type SearchSpec,\n type SearchTerms,\n} from '../common/types'\nimport {FINDABILITY_MVI} from '../constants'\n\nexport interface SearchParams {\n __types: string[]\n __limit: number\n [key: string]: unknown\n}\n\nexport interface SearchQuery {\n query: string\n params: SearchParams\n options: Record<string, unknown>\n searchSpec: SearchSpec[]\n terms: string[]\n}\n\nexport const DEFAULT_LIMIT = 1000\n\nconst combinePaths: (paths: string[][]) => string[] = flow([flatten, union, compact])\n\nconst pathWithMapper = ({mapWith, path}: SearchPath): string =>\n mapWith ? `${mapWith}(${path})` : path\n\n/**\n * Create GROQ constraints, given search terms and the full spec of available document types and fields.\n * Essentially a large list of all possible fields (joined by logical OR) to match our search terms against.\n */\nfunction createConstraints(terms: string[], specs: SearchSpec[]) {\n const combinedSearchPaths = combinePaths(\n specs.map((configForType) => (configForType.paths || []).map((opt) => pathWithMapper(opt))),\n )\n\n const constraints = terms\n .map((_term, i) => combinedSearchPaths.map((joinedPath) => `${joinedPath} match $t${i}`))\n .filter((constraint) => constraint.length > 0)\n\n return constraints.map((constraint) => `(${constraint.join(' || ')})`)\n}\n\nconst SPECIAL_CHARS = /([^!@#$%^&*(),\\\\/?\";:{}|[\\]+<>\\s-])+/g\nconst STRIP_EDGE_CHARS = /(^[.]+)|([.]+$)/\n\nexport function tokenize(string: string): string[] {\n return (string.match(SPECIAL_CHARS) || []).map((token) => token.replace(STRIP_EDGE_CHARS, ''))\n}\n\n/**\n * Convert a string into an array of tokenized terms.\n *\n * Any (multi word) text wrapped in double quotes will be treated as \"phrases\", or separate tokens that\n * will not have its special characters removed.\n * E.g.`\"the\" \"fantastic mr\" fox fox book` =\\> [\"the\", `\"fantastic mr\"`, \"fox\", \"book\"]\n *\n * Phrases wrapped in quotes are assigned relevance scoring differently from regular words.\n *\n * @internal\n */\nexport function extractTermsFromQuery(query: string): string[] {\n const quotedQueries = [] as string[]\n const unquotedQuery = query.replace(/(\"[^\"]*\")/g, (match) => {\n if (words(match).length > 1) {\n quotedQueries.push(match)\n return ''\n }\n return match\n })\n\n // Lowercase and trim quoted queries\n const quotedTerms = quotedQueries.map((str) => trim(toLower(str)))\n\n /**\n * Convert (remaining) search query into an array of deduped, sanitized tokens.\n * All white space and special characters are removed.\n * e.g. \"The saint of Saint-Germain-des-Prés\" =\\> ['the', 'saint', 'of', 'germain', 'des', 'pres']\n */\n const remainingTerms = uniq(compact(tokenize(toLower(unquotedQuery))))\n\n return [...quotedTerms, ...remainingTerms]\n}\n\n/**\n * @internal\n */\nexport function createSearchQuery(\n searchTerms: SearchTerms<SchemaType | CrossDatasetType>,\n searchOpts: SearchOptions & SearchFactoryOptions = {},\n): SearchQuery {\n const {\n filter,\n params,\n tag,\n maxDepth,\n isCrossDataset,\n perspective,\n variant,\n sort,\n limit,\n comments,\n } = searchOpts\n\n const specs = searchTerms.types\n .map((schemaType) =>\n deriveSearchWeightsFromType({\n schemaType,\n maxDepth: maxDepth || DEFAULT_MAX_FIELD_DEPTH,\n isCrossDataset: isCrossDataset,\n }),\n )\n .filter(({paths}) => paths.length)\n\n // Extract search terms from string query, factoring in phrases wrapped in quotes\n const terms = extractTermsFromQuery(searchTerms.query)\n\n // Construct search filters used in this GROQ query\n const filters = [\n '_type in $__types',\n ...createConstraints(terms, specs),\n filter ? `(${filter})` : '',\n searchTerms.filter ? `(${searchTerms.filter})` : '',\n ].filter(Boolean)\n\n const selections = searchOpts.skipSortByScore\n ? []\n : specs.map((spec) => {\n const constraint = `_type == \"${spec.typeName}\" => `\n if (searchOpts.skipSortByScore) {\n return undefined\n }\n const selection = `{ ${spec.paths.map((cfg, i) => `\"w${i}\": ${pathWithMapper(cfg)}`)} }`\n return `${constraint}${selection}`\n })\n\n // Default to `_id asc` (GROQ default) if no search sort is provided.\n const inputSortOrder: SearchSort[] = sort || [{field: '_id', direction: 'asc'}]\n\n const compiledSortEntries = inputSortOrder.map((entry, index) =>\n compileSortExpression(entry, index),\n )\n\n const resolvedSortOrder: SearchSort[] = inputSortOrder.map((entry, index) => ({\n ...entry,\n projectionIndex: compiledSortEntries[index].projectionIndex,\n }))\n\n const orderingsExpressions = compiledSortEntries.map((entry) => entry.expression)\n const orderingsProjection = `\"${ORDERINGS_PROJECTION_KEY}\": [${orderingsExpressions.join(', ')}]`\n const baseProjectionFields = ['_type', '_id', '_originalId']\n const selection = selections.length > 0 ? `...select(${selections.join(',\\n')})` : ''\n\n const projection = [...baseProjectionFields, orderingsProjection, selection]\n .filter(Boolean)\n .join(', ')\n\n const query = [\n `*[${filters.join(' && ')}]`,\n `{${projection}}`,\n `| order(${toOrderClause(resolvedSortOrder)})`,\n `[0...$__limit]`,\n ].join(' ')\n\n // Prepend GROQ comments\n const groqComments = [`findability-mvi:${FINDABILITY_MVI}`]\n .concat(comments || [])\n .map((s) => `// ${s}`)\n .join('\\n')\n\n const updatedQuery = groqComments ? `${groqComments}\\n${query}` : query\n\n return {\n query: updatedQuery,\n params: {\n ...toGroqParams(terms),\n __types: specs.map((spec) => spec.typeName),\n __limit: limit ?? DEFAULT_LIMIT,\n ...params,\n },\n options: {\n tag,\n perspective,\n variant,\n },\n searchSpec: specs,\n terms,\n }\n}\n\nconst toGroqParams = (terms: string[]): Record<string, string> => {\n const params: Record<string, string> = {}\n return terms.reduce((acc, term, i) => {\n acc[`t${i}`] = `${term}*` // \"t\" is short for term\n return acc\n }, params)\n}\n","import {type CrossDatasetType, type SanityDocumentLike, type SchemaType} from '@sanity/types'\nimport sortBy from 'lodash-es/sortBy.js'\nimport {map, tap} from 'rxjs/operators'\n\nimport {\n isReleasePerspective,\n RELEASES_STUDIO_CLIENT_OPTIONS,\n} from '../../releases/util/releasesClient'\nimport {versionedClient} from '../../studioClient'\nimport {removeDupes} from '../../util/draftUtils'\nimport {variantApiVersion} from '../../variants/util/variantApiVersion'\nimport {\n type SearchStrategyFactory,\n type SearchTerms,\n type WeightedSearchResults,\n} from '../common/types'\nimport {applyWeights} from './applyWeights'\nimport {createSearchQuery} from './createSearchQuery'\n\nfunction getSearchTerms(\n searchParams: string | SearchTerms,\n types: (SchemaType | CrossDatasetType)[],\n) {\n if (typeof searchParams === 'string') {\n return {\n query: searchParams,\n types: types,\n }\n }\n return searchParams.types.length ? searchParams : {...searchParams, types}\n}\n\n/**\n * @internal\n */\nexport const createWeightedSearch: SearchStrategyFactory<WeightedSearchResults> = (\n types,\n client,\n factoryOptions,\n) => {\n // Search currently supports both strings (reference + cross dataset reference inputs)\n // or a SearchTerms object (omnisearch).\n return function search(searchParams, searchOptions = {}) {\n const searchTerms = getSearchTerms(searchParams, types)\n\n const {query, params, options, searchSpec, terms} = createSearchQuery(searchTerms, {\n ...factoryOptions,\n ...searchOptions,\n })\n\n const apiVersion = variantApiVersion(\n options?.variant as string | undefined,\n isReleasePerspective(options?.perspective as string | string[] | undefined)\n ? RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion\n : undefined,\n )\n\n return versionedClient(client, apiVersion)\n .observable.fetch<SanityDocumentLike[]>(query, params, options)\n .pipe(\n factoryOptions.unique ? map(removeDupes) : tap(),\n // Assign weighting and scores based on current search terms.\n // No scores will be assigned when terms are empty.\n map((hits) => applyWeights(searchSpec, hits, terms)),\n // Optionally skip client-side score sorting.\n // This can be relevant when ordering results by specific fields, especially dates.\n searchOptions?.skipSortByScore ? tap() : map((hits) => sortBy(hits, (hit) => -hit.score)),\n map((hits) => ({type: 'weighted', hits})),\n )\n }\n}\n","import {type SearchStrategy} from '@sanity/types'\n\nimport {isReleasePerspective, RELEASES_STUDIO_CLIENT_OPTIONS} from '../releases/util/releasesClient'\nimport {versionedClient} from '../studioClient'\nimport {variantApiVersion} from '../variants/util/variantApiVersion'\nimport {\n type Groq2024SearchResults,\n type SearchStrategyFactory,\n type WeightedSearchResults,\n} from './common/types'\nimport {createGroq2024Search} from './groq2024'\nimport {createWeightedSearch} from './weighted'\n\nconst searchStrategies = {\n groqLegacy: createWeightedSearch,\n groq2024: createGroq2024Search,\n} satisfies Record<\n SearchStrategy,\n SearchStrategyFactory<WeightedSearchResults | Groq2024SearchResults>\n>\n\nconst DEFAULT_SEARCH_STRATEGY: SearchStrategy = 'groqLegacy'\n\n/** @internal */\nexport const createSearch: SearchStrategyFactory<WeightedSearchResults | Groq2024SearchResults> = (\n searchableTypes,\n client,\n options,\n) => {\n const factory = searchStrategies[options.strategy ?? DEFAULT_SEARCH_STRATEGY]\n\n const apiVersion = variantApiVersion(\n options?.variant,\n isReleasePerspective(options?.perspective)\n ? RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion\n : undefined,\n )\n\n return factory(searchableTypes, versionedClient(client, apiVersion), options)\n}\n","import {type SearchTerms} from '../../../../../search/common/types'\n\n/**\n * Check if current search terms are valid.\n *\n * By default, completely empty search terms (no search query, types or filter) are considered invalid,\n * unless `allowEmptyQueries` is true.\n */\nexport function hasSearchableTerms({\n allowEmptyQueries,\n terms,\n}: {\n allowEmptyQueries?: boolean\n terms: SearchTerms\n}): boolean {\n const hasQuery = allowEmptyQueries ? true : terms.query.length > 0\n const hasFilter = !!terms.filter\n const hasSelectedTypes = terms.types.length > 0\n\n return hasQuery || hasFilter || hasSelectedTypes\n}\n","import {type ObjectSchemaType, type Schema, type SchemaType} from '@sanity/types'\n\nimport {isNonNullable} from '../../util/isNonNullable'\n\nconst isDocumentType = (type: SchemaType): type is ObjectSchemaType =>\n Boolean(type.type && type.type.name === 'document')\n\nconst isObjectType = (type: SchemaType): type is ObjectSchemaType => type.jsonType === 'object'\n\nconst isIgnoredType = (type: SchemaType): boolean =>\n type.name.startsWith('sanity.') && type.name !== 'sanity.previewUrlSecret'\n\n/**\n * Get all defined document types from the schema that are searchable\n *\n * @param schema - The schema to get searchable types from\n * @param explicitlyAllowedTypes - Array of type names to explicitly allow, even if they are otherwise ignored. This is useful for cases where you want to allow say `sanity.imageAsset` explicitly, or an object type that was _previously_ defined as a document type, and thus still have documents.\n *\n * @internal\n */\nexport const getSearchableTypes = (\n schema: Schema,\n explicitlyAllowedTypes: string[] = [],\n): ObjectSchemaType[] =>\n schema\n .getTypeNames()\n .map((typeName) => schema.get(typeName))\n .filter(isNonNullable)\n .filter(\n (type) =>\n (isDocumentType(type) && !isIgnoredType(type)) ||\n explicitlyAllowedTypes.includes(type.name),\n )\n .filter(isObjectType)\n","import {type ObjectSchemaType, type Schema, type SchemaType} from '@sanity/types'\n\nimport {getSearchableTypes} from '../../../../../search/common/getSearchableTypes'\n\n/**\n * Returns a list of all available document types filtered by a search string.\n * Types containing the search string in its `title` or `name` will be returned.\n */\nexport function getSelectableOmnisearchTypes(schema: Schema, typeFilter: string): SchemaType[] {\n return getSearchableOmnisearchTypes(schema)\n .filter((type) => inTypeFilter(type, typeFilter))\n .sort(sortTypes)\n}\n\n/**\n * Return all searchable document types that are visible to omnisearch.\n * Documents with `__experimental_omnisearch_visibility: false` will be hidden.\n */\nexport function getSearchableOmnisearchTypes(schema: Schema): ObjectSchemaType[] {\n return getSearchableTypes(schema).filter(\n (type) => !(type.__experimental_omnisearch_visibility === false),\n )\n}\n\nexport function sortTypes(a: SchemaType, b: SchemaType): number {\n return (a.title ?? a.name).localeCompare(b.title ?? b.name)\n}\n\nfunction inTypeFilter(type: SchemaType, typeFilter: string): boolean {\n return !typeFilter || (type.title ?? type.name).toLowerCase().includes(typeFilter?.toLowerCase())\n}\n","import {type SanityClient} from '@sanity/client'\nimport {DEFAULT_MAX_FIELD_DEPTH} from '@sanity/schema/_internal'\nimport isFinite from 'lodash-es/isFinite.js'\nimport {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {type Observable, of} from 'rxjs'\nimport {catchError, map, shareReplay, startWith} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\nimport {useWorkspace} from '../../../../workspace'\n\n/** By default the API will return 0 = all fields */\nconst DEFAULT_API_FIELD_DEPTH = 0\n\n/**\n * @internal\n * @hidden\n */\nexport interface PartialIndexSettings {\n partialIndexSettings: {\n maxFieldDepth: number\n }\n}\n\ninterface Settings {\n isLoading: boolean\n settings: PartialIndexSettings\n}\n\nconst INITIAL_LOADING_STATE: Settings = {\n isLoading: true,\n settings: {\n partialIndexSettings: {\n maxFieldDepth: DEFAULT_API_FIELD_DEPTH,\n },\n },\n}\n\n/**\n * Fetches the index settings for the current dataset, if any\n */\nfunction fetchMaxDepth({client}: {client: SanityClient}): Observable<PartialIndexSettings> {\n const {projectId, dataset} = client.config()\n return client.observable.request<PartialIndexSettings>({\n uri: `/projects/${projectId}/datasets/${dataset}/settings/indexing`,\n tag: 'search.getPartialIndexSettings',\n })\n}\n\nconst cachedSettings: Map<string, Observable<PartialIndexSettings>> = new Map()\n\n/**\n * @internal\n * @hidden\n */\nexport function useSearchMaxFieldDepth(overrideClient?: SanityClient): number {\n const isEnabled = useWorkspace().search?.unstable_partialIndexing?.enabled\n const workspaceClient = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const client = useMemo(() => overrideClient || workspaceClient, [overrideClient, workspaceClient])\n const dataset = useMemo(() => client.config().dataset, [client])!\n\n if (!isEnabled) {\n cachedSettings.set(dataset, of(INITIAL_LOADING_STATE.settings))\n }\n\n if (!cachedSettings.has(dataset)) {\n cachedSettings.set(dataset, fetchMaxDepth({client}).pipe(shareReplay()))\n }\n\n const indexSettingsObservable = useMemo(\n () =>\n cachedSettings.get(dataset)!.pipe(\n map((settings) => ({\n isLoading: false,\n settings,\n })),\n startWith(INITIAL_LOADING_STATE),\n catchError((err: Error) => {\n console.error(err)\n return of({\n isLoading: false,\n enabled: true,\n settings: {partialIndexSettings: {maxFieldDepth: DEFAULT_API_FIELD_DEPTH}},\n })\n }),\n ),\n [dataset],\n )\n const indexSettings = useObservable(indexSettingsObservable, INITIAL_LOADING_STATE)\n\n const maxFieldDepth = indexSettings?.settings?.partialIndexSettings?.maxFieldDepth\n\n if (!isFinite(maxFieldDepth)) {\n return DEFAULT_MAX_FIELD_DEPTH\n }\n\n return Math.min(maxFieldDepth, DEFAULT_MAX_FIELD_DEPTH)\n}\n","import {type Schema} from '@sanity/types'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useMemo, useState} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {concat, EMPTY, iif, type Observable, of, timer} from 'rxjs'\nimport {\n catchError,\n debounce,\n distinctUntilChanged,\n filter,\n map,\n scan,\n switchMap,\n tap,\n} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {\n type SearchHit,\n type SearchOptions,\n type SearchTerms,\n} from '../../../../../search/common/types'\nimport {createSearch} from '../../../../../search/search'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\nimport {useWorkspace} from '../../../../workspace'\nimport {type SearchState} from '../types'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {useSearchMaxFieldDepth} from './useSearchMaxFieldDepth'\n\ninterface SearchRequest {\n debounceTime?: number\n options?: SearchOptions\n terms: SearchTerms\n}\n\nconst DEFAULT_DEBOUNCE_TIME = 300 // ms\n\nconst INITIAL_SEARCH_STATE: SearchState = {\n error: null,\n hits: [],\n loading: false,\n terms: {\n query: '',\n types: [],\n },\n}\n\nfunction nonNullable<T>(v: T): v is NonNullable<T> {\n return v !== null\n}\n\nfunction sanitizeRequest(request: SearchRequest) {\n return {\n ...request,\n terms: {\n ...request.terms,\n filter: request.terms.filter?.trim(),\n query: request.terms.query.trim(),\n },\n }\n}\n\nexport function useSearch({\n allowEmptyQueries,\n initialState,\n onComplete,\n onError,\n onStart,\n schema,\n}: {\n allowEmptyQueries?: boolean\n initialState: SearchState\n onComplete?: (result: {hits: SearchHit[]; nextCursor: string | undefined}) => void\n onError?: (error: Error) => void\n onStart?: () => void\n schema: Schema\n}): {\n handleSearch: (request: SearchRequest) => void\n searchState: SearchState\n} {\n const [searchState, setSearchState] = useState(initialState)\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const maxFieldDepth = useSearchMaxFieldDepth()\n const {strategy} = useWorkspace().search\n\n const search = useMemo(\n () =>\n createSearch(getSearchableOmnisearchTypes(schema), client, {\n tag: 'search.global',\n unique: true,\n strategy,\n maxDepth: maxFieldDepth,\n }),\n [schema, client, strategy, maxFieldDepth],\n )\n\n const handleQueryChange = useObservableEvent((inputValue$: Observable<SearchRequest | null>) => {\n return inputValue$.pipe(\n // Ignore null values\n filter(nonNullable),\n // Sanitize request (trim query and filter)\n map(sanitizeRequest),\n // Only emit when values have changed\n distinctUntilChanged(isEqual),\n // Debounce requests\n debounce((request) => timer(request?.debounceTime || DEFAULT_DEBOUNCE_TIME)),\n // Trigger `onStart` callback\n tap(onStart),\n switchMap((request) => {\n return concat(\n // Emit loading start\n of({\n ...INITIAL_SEARCH_STATE,\n loading: true,\n options: request.options,\n terms: request.terms,\n }),\n // Conditionally trigger search ONLY if we have valid searchable terms.\n // Typically, search terms are valid if either query, filter or selected types is non-empty.\n // There are exceptions (e.g. searching within <AutoComplete> components) where empty queries are permitted,\n // which is what `allowEmptyQueries` is used for.\n iif(\n () => hasSearchableTerms({allowEmptyQueries, terms: request.terms}),\n // If we have a valid search, run async fetch, map results and trigger `onComplete` / `onError` callbacks\n search(request.terms, request.options).pipe(\n tap(({hits, nextCursor}) => onComplete?.({hits, nextCursor})),\n catchError((error) => {\n onError?.(error)\n return of({\n ...INITIAL_SEARCH_STATE,\n error,\n loading: false,\n options: request.options,\n terms: request.terms,\n })\n }),\n ),\n // If there is no valid search, emit an empty observable and trigger `onComplete` event\n of(EMPTY).pipe(tap(() => onComplete?.({hits: [], nextCursor: undefined}))),\n ),\n // Emit loading completed\n of({loading: false}),\n )\n }),\n scan((prevState, nextState): SearchState => {\n return {...prevState, ...nextState}\n }, INITIAL_SEARCH_STATE),\n // Update local search state\n tap(setSearchState),\n )\n })\n\n const handleSearch = useCallback(\n (searchRequest: SearchRequest) => handleQueryChange(searchRequest),\n [handleQueryChange],\n )\n\n return {handleSearch, searchState}\n}\n","import {type SchemaType} from '@sanity/types'\n\nimport {type TFunction} from '../../../../../i18n/types'\n\nconst DEFAULT_AVAILABLE_CHARS = 40 // excluding \"+x more\" suffix\n\n/**\n * From the list of provided document types, return as many type names as possible that can fit\n * within the `availableCharacters` parameter, formatted by title where available. Includes the\n * number of remaining types that were _not_ included in the returned array of types, so a UI can\n * choose to display a \"+x more\" suffix.\n *\n * @see documentTypesTruncated for a helper function that returns a formatted string\n *\n * @param options - Options object\n * @returns An object containing truncated list of types, as well as number of excluded types\n * @internal\n */\nexport function getDocumentTypesTruncated({\n availableCharacters = DEFAULT_AVAILABLE_CHARS,\n types,\n}: {\n availableCharacters?: number\n types: SchemaType[]\n}): {types: string[]; remainingCount: number} {\n if (types.length === 0) {\n return {remainingCount: 0, types: []}\n }\n\n /**\n * Get the total number of visible document types whose titles fit within `availableCharacters` count.\n * The first document is always included, regardless of whether it fits within `availableCharacters` or not.\n */\n const visibleTypes = types.reduce<SchemaType[]>(\n (function () {\n let remaining = availableCharacters\n return function (acc, val, index) {\n const title = typeTitle(val)\n remaining -= title.length\n\n // Always include the first type, regardless of title length\n if (index === 0) {\n acc.push(val)\n } else if (availableCharacters > title.length && remaining > title.length) {\n acc.push(val)\n }\n return acc\n }\n })(),\n [],\n )\n\n return {\n remainingCount: types.length - visibleTypes.length,\n types: visibleTypes.map(typeTitle),\n }\n}\n\n/**\n * From the list of provided document types, return as many type names as possible that can fit\n * within the `availableCharacters` parameter, formatted by title where available. Includes the\n * number of remaining types that were _not_ included in the returned array of types, so a UI can\n * choose to display a \"+x more\" suffix.\n *\n * @param options - Options object\n * @returns A formatted string of types\n * @internal\n */\nexport function documentTypesTruncated({\n t,\n availableCharacters,\n types,\n}: {\n availableCharacters?: number\n types: SchemaType[]\n t: TFunction<'studio'>\n}): string {\n if (types.length === 0) {\n return t('search.document-type-list-all-types')\n }\n\n const {remainingCount, types: visibleTypes} = getDocumentTypesTruncated({\n availableCharacters,\n types,\n })\n\n const key =\n remainingCount > 0 ? 'search.document-type-list-truncated' : 'search.document-type-list'\n\n // \"Author, Book\" or \"Author, Book, Pet, Person +2 more\"\n return t(key, {\n count: remainingCount,\n types: visibleTypes,\n formatParams: {types: {style: 'short', type: 'unit'}},\n })\n}\n\nfunction typeTitle(schemaType: SchemaType) {\n return schemaType.title ?? schemaType.name\n}\n","import {Box} from '@sanity/ui'\nimport {css, styled} from 'styled-components'\n\nexport const CustomTextInputBox = styled(Box)<{\n $background?: boolean\n $smallClearButton?: boolean\n}>(({$background, $smallClearButton}) => {\n return css`\n width: 100%;\n\n input + span {\n background: ${({theme}) =>\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n $background ? theme.sanity.color.card.disabled.bg2 : 'transparent'};\n }\n\n [data-qa='clear-button'] {\n background: none;\n box-shadow: none;\n display: flex; /* TODO: hack, currently used to vertically center <TextInput>'s clearButton */\n transform: ${$smallClearButton ? 'scale(0.8)' : 'scale(1)'};\n &:hover {\n opacity: 0.5;\n }\n }\n `\n})\n","import {TextInput} from '@sanity/ui'\nimport {type ComponentProps, type RefAttributes} from 'react'\n\nimport {CustomTextInputBox} from './CustomTextInputBox'\n\ninterface CustomTextInputProps extends ComponentProps<typeof TextInput> {\n $background?: boolean\n $smallClearButton?: boolean\n}\n\nexport function CustomTextInput(props: CustomTextInputProps & RefAttributes<HTMLInputElement>) {\n const {ref, $background, $smallClearButton, ...rest} = props\n\n return (\n <CustomTextInputBox $background={$background} $smallClearButton={$smallClearButton}>\n <TextInput {...rest} ref={ref} />\n </CustomTextInputBox>\n )\n}\n","import {ToggleArrowRightIcon} from '@sanity/icons/ToggleArrowRight'\nimport {Box, Flex, Text} from '@sanity/ui'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport {styled} from 'styled-components'\n\ninterface DetailsProps {\n children?: ReactNode\n margin?: number | number[]\n marginX?: number | number[]\n marginY?: number | number[]\n marginTop?: number | number[]\n marginRight?: number | number[]\n marginBottom?: number | number[]\n marginLeft?: number | number[]\n open?: boolean\n icon?: ReactNode\n title?: ReactNode\n}\n\nconst HeaderButton = styled.button`\n display: block;\n -webkit-font-smoothing: inherit;\n appearance: none;\n font: inherit;\n background: none;\n width: 100%;\n text-align: left;\n border: 0;\n margin: 0;\n padding: 0;\n outline: none;\n`\n\nconst ToggleArrow = styled(ToggleArrowRightIcon)<{open: boolean}>`\n transform: ${(props) => (props.open ? 'rotate(90deg)' : '')};\n`\n\nconst Header = styled(Flex)`\n cursor: default;\n line-height: 0;\n`\n\nconst IconBox = styled(Flex)`\n & > div > svg {\n transform: rotate(0);\n transition: transform 100ms;\n }\n\n &[data-open] > div > svg {\n transform: rotate(90deg);\n }\n`\n\nexport function Details(props: DetailsProps) {\n const {children, open: openProp, icon, title = 'Details', ...restProps} = props\n const [open, setOpen] = useState(openProp || false)\n\n const handleToggle = useCallback(() => setOpen((v) => !v), [])\n\n // oxlint-disable-next-line react/react-compiler\n useEffect(() => setOpen(openProp || false), [openProp])\n\n return (\n <Box {...restProps}>\n <HeaderButton type=\"button\" onClick={handleToggle}>\n <Header>\n <Flex align=\"center\">\n <IconBox data-open={open ? '' : undefined}>\n <Text size={1}>\n <ToggleArrow open={open} />\n </Text>\n </IconBox>\n {icon && <Box marginLeft={1}>{icon}</Box>}\n <Box flex={1} marginLeft={1}>\n <Text textOverflow=\"ellipsis\" size={1} weight=\"medium\">\n {title}\n </Text>\n </Box>\n </Flex>\n </Header>\n </HeaderButton>\n\n <Box hidden={!open} marginTop={3}>\n {children}\n </Box>\n </Box>\n )\n}\n","import {type CompatibleStudioAppId} from './fetchCreateCompatibleAppId'\n\nexport interface AppIdCache {\n get: (args: {\n projectId: string\n appIdFetcher: AppIdFetcher\n }) => Promise<CompatibleStudioAppId | undefined>\n}\nexport type AppIdFetcher = (projectId: string) => Promise<CompatibleStudioAppId>\n\nexport function createAppIdCache(): AppIdCache {\n const appIdCache: {\n [key: string]: CompatibleStudioAppId | Promise<CompatibleStudioAppId | undefined> | undefined\n } = {}\n\n return {\n get: async (args) => {\n const {projectId, appIdFetcher} = args\n let cacheElement = appIdCache[projectId]\n if (!cacheElement) {\n cacheElement = (async () => {\n try {\n return await appIdFetcher(projectId)\n } catch (error) {\n console.error(error)\n appIdCache[projectId] = undefined\n return undefined\n }\n })()\n appIdCache[projectId] = cacheElement\n return cacheElement\n }\n\n return cacheElement\n },\n }\n}\n","import {type ReactNode, useContext, useMemo} from 'react'\nimport {AppIdCacheContext} from 'sanity/_singletons'\n\nimport {type AppIdCache, createAppIdCache} from './appIdCache'\n\ninterface AppIdCacheProviderProps {\n children: ReactNode\n}\n\n/**\n * @internal\n */\nexport function AppIdCacheProvider(props: AppIdCacheProviderProps) {\n const {children} = props\n const parentCache = useContext(AppIdCacheContext)\n\n const cache = useMemo(() => parentCache || createAppIdCache(), [parentCache])\n\n return <AppIdCacheContext.Provider value={cache}>{children}</AppIdCacheContext.Provider>\n}\n\n/**\n * @internal\n */\nexport function useAppIdCache(): AppIdCache {\n const cache = useContext(AppIdCacheContext)\n\n if (!cache) {\n throw new Error(\n 'AppIdCache: missing context value. Ensure the component is wrapped in a AppIdCacheProvider.',\n )\n }\n\n return cache\n}\n","export async function checkStudioManifestExists(studioHostUrl: string): Promise<boolean> {\n const url = `${studioHostUrl}/static/create-manifest.json`\n try {\n const response = await fetch(url, {\n method: 'HEAD',\n })\n\n if (response.status == 404) {\n return false\n }\n\n if (response.status > 299) {\n console.error(`Failed to get manifest from ${url}`, response)\n return false\n }\n\n return true\n } catch (e) {\n console.error(`Failed to fetch from ${url}`, e)\n return false\n }\n}\n","import {type SanityClient} from '@sanity/client'\n\nimport {isStaging} from '../../environment/isStaging'\nimport {checkStudioManifestExists} from './checkStudioManifestExists'\n\nexport interface StudioAppResponse {\n id: string\n title?: string\n type: 'studio' | string\n urlType: 'internal' | 'external' | string\n appHost: string\n}\n\nexport interface StudioApp extends StudioAppResponse {\n studioUrl: string\n}\n\nexport interface CompatibleStudioAppId {\n /**\n * AppId to use for the current origin\n */\n appId: string | undefined\n\n /**\n * All available studio apps\n */\n studioApps: StudioApp[]\n}\n\nconst internalUrlSuffix = isStaging ? 'studio.sanity.work' : 'sanity.studio'\n\nasync function fetchStudiosWithUrl(\n client: SanityClient,\n projectId: string,\n internalSuffix: string,\n) {\n const apps = await client.request<StudioAppResponse[]>({\n method: 'GET',\n url: `/projects/${projectId}/user-applications`,\n })\n\n return apps.map((app) => ({\n ...app,\n studioUrl: getStudioUrl(app, internalSuffix),\n }))\n}\n\nexport async function fetchCreateCompatibleAppId(args: {\n projectId: string\n client: SanityClient\n fallbackOrigin?: string\n internalSuffix?: string\n checkStudioManifest?: (studioHost: string) => Promise<boolean>\n origin?: string\n}): Promise<CompatibleStudioAppId> {\n const {\n projectId,\n client,\n fallbackOrigin,\n internalSuffix = internalUrlSuffix,\n checkStudioManifest = checkStudioManifestExists,\n origin = window.location?.origin,\n } = args\n const appsWithStudioUrl = await fetchStudiosWithUrl(client, projectId, internalSuffix)\n\n const appMatchingOrigin = appsWithStudioUrl.find((app) => {\n return app && origin && app.studioUrl?.startsWith(origin)\n })\n\n if (appMatchingOrigin?.appHost) {\n const manifest = await checkStudioManifest(getStudioUrl(appMatchingOrigin, internalSuffix))\n if (manifest) {\n return {\n appId: appMatchingOrigin.id,\n studioApps: appsWithStudioUrl,\n }\n }\n }\n\n const appMatchingFallback = appsWithStudioUrl.find((app) => {\n return app && fallbackOrigin && app.studioUrl?.startsWith(`https://${fallbackOrigin}`)\n })\n\n return {\n appId: appMatchingFallback?.id,\n studioApps: appsWithStudioUrl,\n }\n}\n\nfunction getStudioUrl(app: StudioAppResponse, internalSuffix: string): string {\n return app.urlType === 'internal' ? `https://${app.appHost}.${internalSuffix}` : app.appHost\n}\n","import {useEffect, useMemo, useState} from 'react'\n\nimport {useClient} from '../../hooks/useClient'\nimport {useSource} from '../../studio/source'\nimport {type AppIdCache, type AppIdFetcher} from './appIdCache'\nimport {useAppIdCache} from './AppIdCacheProvider'\nimport {type CompatibleStudioAppId, fetchCreateCompatibleAppId} from './fetchCreateCompatibleAppId'\n\nexport interface ResolvedStudioApp {\n loading: boolean\n studioApp?: CompatibleStudioAppId\n}\n\n/**\n * Fetches & caches the Studio appId for the current origin.\n *\n * @internal\n */\nexport function useStudioAppIdStore(config: {\n enabled: boolean\n fallbackStudioOrigin?: string\n}): ResolvedStudioApp {\n const client = useClient({apiVersion: '2024-09-01'})\n const cache = useAppIdCache()\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n const {projectId} = useSource()\n\n const appIdFetcher: AppIdFetcher = useMemo(() => {\n return (pId) =>\n fetchCreateCompatibleAppId({\n projectId: pId,\n client,\n fallbackOrigin: config.fallbackStudioOrigin,\n })\n }, [client, config.fallbackStudioOrigin])\n\n return useStudioAppIdStoreInner({\n projectId,\n cache,\n appIdFetcher,\n enabled: config.enabled,\n })\n}\n\nexport function useStudioAppIdStoreInner(props: {\n cache: AppIdCache\n projectId: string\n enabled: boolean\n appIdFetcher: AppIdFetcher\n}): ResolvedStudioApp {\n const {cache, enabled, appIdFetcher, projectId} = props\n const [loading, setLoading] = useState(false)\n\n const [studioApp, setStudioApp] = useState<CompatibleStudioAppId | undefined>()\n\n useEffect(() => {\n let mounted = true\n async function getAppId() {\n if (!projectId) {\n return\n }\n setLoading(true)\n\n try {\n const entry = await cache.get({projectId, appIdFetcher})\n if (mounted) setStudioApp(entry)\n } catch {\n if (mounted) setStudioApp(undefined)\n }\n if (mounted) setLoading(false)\n }\n\n if (enabled) {\n getAppId().catch(console.error)\n }\n return () => {\n mounted = false\n setLoading(false)\n }\n }, [setLoading, appIdFetcher, cache, enabled, projectId])\n\n return {\n loading,\n studioApp,\n }\n}\n","/** @internal */\nexport const supportsTouch = isTouchDevice()\n\nfunction isTouchDevice() {\n if (typeof window === 'undefined') return false\n\n return (\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (navigator as any).msMaxTouchPoints > 0\n )\n}\n","import {\n type SearchOperatorBase,\n type SearchOperatorButtonValue,\n type SearchOperatorInput,\n type SearchOperatorParams,\n} from './operatorTypes'\n\n/** @internal */\nexport interface SearchOperatorDefinition<TValue = any> extends SearchOperatorBase {\n buttonValueComponent?: SearchOperatorButtonValue<TValue>\n groqFilter: (params: SearchOperatorParams<TValue>) => string | null\n initialValue?: TValue\n inputComponent?: SearchOperatorInput<TValue>\n type: string\n}\n\nexport function createOperatorDefinitionDictionary(\n operatorDefinitions: SearchOperatorDefinition[],\n): SearchOperatorDefinitionDictionary {\n return operatorDefinitions.reduce<SearchOperatorDefinitionDictionary>((acc, val) => {\n acc[val.type] = val\n return acc\n }, {})\n}\n\nexport function getOperatorDefinition(\n operators: SearchOperatorDefinitionDictionary,\n operatorType?: string,\n): SearchOperatorDefinition | undefined {\n return operatorType ? operators[operatorType] : undefined\n}\n\nexport function getOperatorInitialValue(\n operators: SearchOperatorDefinitionDictionary,\n operatorType: string,\n): SearchOperatorDefinition['initialValue'] | undefined {\n return getOperatorDefinition(operators, operatorType)?.initialValue\n}\n\n/** @internal */\nexport type SearchOperatorDefinitionDictionary = Record<\n SearchOperatorDefinition['type'],\n SearchOperatorDefinition\n>\n","import {type SchemaType} from '@sanity/types'\nimport intersection from 'lodash-es/intersection.js'\nimport isEmpty from 'lodash-es/isEmpty.js'\n\nimport {isNonNullable} from '../../../../../util/isNonNullable'\nimport {\n type SearchFieldDefinition,\n type SearchFieldDefinitionDictionary,\n} from '../definitions/fields'\nimport {\n getFilterDefinition,\n type OperatorItem,\n type SearchFilterDefinition,\n type SearchFilterDefinitionDictionary,\n} from '../definitions/filters'\nimport {\n getOperatorDefinition,\n type SearchOperatorDefinitionDictionary,\n} from '../definitions/operators'\nimport {type SearchFilter} from '../types'\n\nexport function buildSearchFilter(\n filterDefinition: SearchFilterDefinition,\n fieldId?: string,\n): SearchFilter {\n return {\n fieldId,\n filterName: filterDefinition.name,\n operatorType:\n filterDefinition?.operators.find((operator): operator is OperatorItem => {\n return operator.type === 'item'\n })?.name || '',\n }\n}\n\nexport function generateFilterQuery({\n fieldDefinitions,\n filterDefinitions,\n filters,\n operatorDefinitions,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n filters: SearchFilter[]\n operatorDefinitions: SearchOperatorDefinitionDictionary\n}): string {\n return filters\n .filter((filter) =>\n validateFilter({\n filter,\n filterDefinitions,\n fieldDefinitions,\n operatorDefinitions,\n }),\n )\n .map((filter) => {\n return getOperatorDefinition(operatorDefinitions, filter.operatorType)?.groqFilter({\n fieldPath: resolveFieldPath({filter, fieldDefinitions, filterDefinitions}),\n value: filter?.value,\n })\n })\n .filter((filter) => !isEmpty(filter))\n .filter(isNonNullable)\n .join(' && ')\n}\n\nexport function getFieldFromFilter(\n fields: SearchFieldDefinitionDictionary,\n filter: SearchFilter,\n): SearchFieldDefinition | undefined {\n return filter?.fieldId ? fields[filter.fieldId] : undefined\n}\n\nexport function getFilterKey(filter: SearchFilter): string {\n return [filter.filterName, ...(filter.fieldId ? [filter.fieldId] : [])].join('-')\n}\n\nexport function narrowDocumentTypes({\n fieldDefinitions,\n filters,\n types,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filters: SearchFilter[]\n types: SchemaType[]\n}): string[] {\n // Get all 'manually' selected document types\n const selectedDocumentTypes = types.map((type) => type.name)\n\n const filteredDocumentTypes = Object.values(fieldDefinitions)\n .filter((field) => filters.map((filter) => filter?.fieldId).includes(field.id))\n .filter((field) => field.documentTypes.length > 0)\n .map((field) => field.documentTypes)\n\n // Get intersecting document types across all active filters (that have at least one document type).\n // Filters that have no document types (i.e. `_updatedAt` which is available to all) are ignored.\n const intersectingDocumentTypes = intersection(...filteredDocumentTypes)\n\n const documentTypes: string[][] = []\n if (selectedDocumentTypes.length > 0) {\n documentTypes.push(selectedDocumentTypes)\n }\n if (intersectingDocumentTypes.length > 0) {\n documentTypes.push(intersectingDocumentTypes)\n }\n\n return intersection(...documentTypes).sort()\n}\n\nfunction resolveFieldPath({\n filter,\n fieldDefinitions,\n filterDefinitions,\n}: {\n filter: SearchFilter\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n}): string | undefined {\n const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n const filterDefinition = getFilterDefinition(filterDefinitions, filter.filterName)\n\n if (!filterDefinition) {\n return undefined\n }\n\n switch (filterDefinition.type) {\n case 'field':\n return fieldDefinition?.fieldPath\n case 'pinned':\n return filterDefinition?.fieldPath\n default:\n return undefined\n }\n}\n\n/**\n * Validate if the supplied filter:\n * - has a valid filter defintion\n * - has a valid field definition (if it references a fieldId)\n * - has a valid operator (if present)\n */\nexport function validateFilter({\n filter,\n filterDefinitions,\n fieldDefinitions,\n operatorDefinitions,\n}: {\n filter: SearchFilter\n filterDefinitions: SearchFilterDefinitionDictionary\n fieldDefinitions: SearchFieldDefinitionDictionary\n operatorDefinitions: SearchOperatorDefinitionDictionary\n}): boolean {\n const filterDef = getFilterDefinition(filterDefinitions, filter.filterName)\n const operatorDef = getOperatorDefinition(operatorDefinitions, filter.operatorType)\n const fieldDef = getFieldFromFilter(fieldDefinitions, filter)\n\n // Fail: No matching filter definition\n if (!filterDef) {\n return false\n }\n\n // Fail: No matching operator\n if (!operatorDef) {\n return false\n }\n\n // Fail: No matching field definition\n if (filter.fieldId) {\n if (!fieldDef) {\n return false\n }\n }\n\n // Field filters:\n if (filterDef.type === 'field') {\n // Fail: field definition has invalid path\n if (!fieldDef?.fieldPath) {\n return false\n }\n // Fail: no field ID\n if (!filter.fieldId) {\n return false\n }\n // Fail: no filter value\n const hasFilterValue = operatorDef.groqFilter({\n fieldPath: fieldDef.fieldPath,\n value: filter.value,\n })\n if (!hasFilterValue) {\n return false\n }\n }\n\n // Pinned filters:\n if (filterDef.type === 'pinned') {\n // Fail: no filter value\n const hasFilterValue = operatorDef.groqFilter({\n fieldPath: filterDef.fieldPath,\n value: filter.value,\n })\n if (!hasFilterValue) {\n return false\n }\n }\n\n return true\n}\n","import {Card, Flex, useGlobalKeyDown, useLayer} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {type ReactNode, useCallback, useEffect, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {POPOVER_INPUT_PADDING, POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\n\ninterface FilterPopoverWrapperProps {\n anchorElement?: HTMLElement | null\n children?: ReactNode\n onClose: () => void\n}\n\nconst isEscape = isHotkey('escape')\n\nconst MAX_HEIGHT = 500 // px\n\nconst HiddenOverlay = styled.div`\n background: transparent;\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: -1;\n`\n\nexport function FilterPopoverWrapper({\n anchorElement,\n children,\n onClose,\n}: FilterPopoverWrapperProps) {\n const {isTopLayer} = useLayer()\n\n const handleGlobalKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (isEscape(event) && isTopLayer) {\n onClose()\n }\n },\n [isTopLayer, onClose],\n )\n\n useGlobalKeyDown(handleGlobalKeyDown)\n\n const popoverOffset = usePopoverOffset(anchorElement || null)\n\n return (\n <>\n <HiddenOverlay onClick={onClose} />\n <FocusLock autoFocus={false} returnFocus>\n <Card\n display=\"flex\"\n overflow=\"hidden\"\n radius={POPOVER_RADIUS}\n style={{\n maxHeight: `min(calc(100vh - ${popoverOffset}px - ${POPOVER_VERTICAL_MARGIN}px - ${POPOVER_INPUT_PADDING}px), ${MAX_HEIGHT}px`,\n zIndex: 1,\n }}\n >\n <Flex>{children}</Flex>\n </Card>\n </FocusLock>\n </>\n )\n}\n\nfunction calcPopoverOffset(element: HTMLElement) {\n const rect = element.getBoundingClientRect()\n const offset = rect.y + rect.height + POPOVER_VERTICAL_MARGIN\n return offset\n}\n\nfunction usePopoverOffset(element: HTMLElement | null) {\n const [offset, setOffset] = useState<number | null>(element && calcPopoverOffset(element))\n\n const handleWindowResize = useCallback(() => {\n if (element) {\n setOffset(calcPopoverOffset(element))\n }\n }, [element])\n\n useEffect(() => {\n if (element) {\n // oxlint-disable-next-line react/react-compiler\n setOffset(calcPopoverOffset(element))\n }\n }, [element])\n\n useEffect(() => {\n window.addEventListener('resize', handleWindowResize)\n return () => window.removeEventListener('resize', handleWindowResize)\n }, [handleWindowResize])\n\n return offset\n}\n","import {SearchIcon} from '@sanity/icons/Search'\nimport {Box, Flex} from '@sanity/ui'\nimport {type ChangeEvent, type RefAttributes} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {CustomTextInput} from '../../common/CustomTextInput'\n\ninterface FilterPopoverContentHeaderProps {\n ariaInputLabel: string\n onChange: (e: ChangeEvent<HTMLInputElement>) => void\n onClear: () => void\n typeFilter: string\n}\n\nconst SearchHeaderBox = styled(Box)`\n border-bottom: 1px solid\n ${({theme}) => theme.sanity.color.base.border /* oxlint-disable-line no-deprecated -- will fix in follow up PR */};\n flex-shrink: 0;\n`\n\nconst SearchHeaderContentFlex = styled(Flex)`\n box-sizing: border-box;\n`\n\nexport function FilterPopoverContentHeader({\n ref,\n ariaInputLabel,\n onChange,\n onClear,\n typeFilter,\n}: FilterPopoverContentHeaderProps & RefAttributes<HTMLInputElement>) {\n const {\n state: {fullscreen},\n } = useSearchState()\n const {t} = useTranslation()\n\n return (\n <SearchHeaderBox>\n <SearchHeaderContentFlex align=\"center\" flex={1} padding={1}>\n <CustomTextInput\n __unstable_disableFocusRing\n $smallClearButton\n aria-label={ariaInputLabel}\n autoComplete=\"off\"\n border={false}\n clearButton={!!typeFilter}\n fontSize={fullscreen ? 2 : 1}\n icon={SearchIcon}\n muted\n onChange={onChange}\n onClear={onClear}\n placeholder={t('search.filter-placeholder')}\n ref={ref}\n spellCheck={false}\n radius={2}\n value={typeFilter}\n />\n </SearchHeaderContentFlex>\n </SearchHeaderBox>\n )\n}\n","import {type Schema, type SchemaType} from '@sanity/types'\nimport {type ButtonTone} from '@sanity/ui'\nimport difference from 'lodash-es/difference.js'\nimport startCase from 'lodash-es/startCase.js'\n\nimport {type TFunction} from '../../../../../../../i18n/types'\nimport {isNonNullable} from '../../../../../../../util/isNonNullable'\nimport {\n type SearchFieldDefinition,\n type SearchFieldDefinitionDictionary,\n} from '../../../definitions/fields'\nimport {\n getFilterDefinition,\n type SearchFilterDefinition,\n type SearchFilterDefinitionDictionary,\n type SearchFilterPinnedDefinition,\n} from '../../../definitions/filters'\nimport {\n type FilterMenuItem,\n type FilterMenuItemFilter,\n type FilterMenuItemHeader,\n type SearchFilter,\n} from '../../../types'\nimport {buildSearchFilter, getFieldFromFilter} from '../../../utils/filterUtils'\n\n/**\n * Creates a flat list of filter menu items based on the current filter text input.\n */\nexport function createFilterMenuItems({\n documentTypesNarrowed,\n fieldDefinitions,\n filterDefinitions,\n schema,\n titleFilter,\n types,\n t,\n}: {\n documentTypesNarrowed: string[]\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n schema: Schema\n titleFilter: string\n types: SchemaType[]\n t: TFunction<'studio'>\n}): FilterMenuItem[] {\n // Construct field filters based on available definitions and current title fitler\n const fieldFilters = Object.values(fieldDefinitions)\n .filter((fieldDef) => includesTitleInFieldDefinition(fieldDef, titleFilter))\n .map((fieldDef) => {\n const filterDef = getFilterDefinition(filterDefinitions, fieldDef.filterName)\n if (filterDef) {\n return buildSearchFilter(filterDef, fieldDef.id)\n }\n return null\n })\n .filter(isNonNullable)\n\n const pinnedItems = buildPinnedMenuItems({\n fieldDefinitions,\n filterDefinitions,\n titleFilter,\n })\n\n if (documentTypesNarrowed.length === 0) {\n return [\n ...pinnedItems,\n // All fields\n ...filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: fieldFilters,\n headerTitle: t('search.filter-all-fields-header'),\n id: 'field',\n }),\n ]\n }\n\n return [\n ...pinnedItems,\n // All shared / narrowed items\n ...buildFieldMenuItemsNarrowed({\n documentTypesNarrowed,\n fieldDefinitions,\n filterDefinitions,\n filters: fieldFilters,\n schema,\n types,\n t,\n }),\n ]\n}\n\nfunction filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters,\n id,\n headerTitle,\n tone,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n filters: SearchFilter[]\n id: string\n headerTitle?: string\n tone?: ButtonTone\n}): FilterMenuItem[] {\n const header: FilterMenuItemHeader = {\n title: headerTitle || '',\n tone: tone || 'default',\n type: 'header',\n }\n const filterItems = filters.map(\n (filter) =>\n ({\n fieldDefinition: getFieldFromFilter(fieldDefinitions, filter),\n filterDefinition: getFilterDefinition(filterDefinitions, filter.filterName),\n filter,\n group: id,\n tone: tone || 'default',\n type: 'filter',\n }) as FilterMenuItemFilter,\n )\n\n return filterItems.length > 0\n ? [\n ...(headerTitle ? [header] : []), //\n ...filterItems,\n ]\n : []\n}\n\n/**\n * Construct a flat list of narrowed field menu items, including shared fields.\n * Shared fields should always appear first.\n */\nfunction buildFieldMenuItemsNarrowed({\n documentTypesNarrowed,\n fieldDefinitions,\n filterDefinitions,\n filters,\n schema,\n types,\n t,\n}: {\n documentTypesNarrowed: string[]\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n filters: SearchFilter[]\n schema: Schema\n types: SchemaType[]\n t: TFunction<'studio'>\n}) {\n const sharedFilters = filters.filter((filter) => {\n const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n return sharesDocumentTypes(documentTypesNarrowed, fieldDefinition)\n })\n\n const sharedItems =\n documentTypesNarrowed.length > 1 && types.length > 1\n ? filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: sharedFilters,\n headerTitle: t('search.filter-shared-fields-header'),\n id: 'shared',\n tone: 'primary',\n })\n : []\n\n const groupedItems = documentTypesNarrowed\n .map((documentType) => {\n const docType = schema.get(documentType)\n return {\n // Note: it shouldn't be possible to select document types that do not exist in schema,\n // and there is no way to inject it into state (eg not persisted in URL), thus we leave\n // this fallback (`Unknown type`) only as a edge-case safety net and will not translate it.\n title: docType?.title || startCase(docType?.name) || '(Unknown type)',\n documentType,\n }\n })\n // Sort groups by title\n .sort((a, b) => a.title.localeCompare(b.title))\n .flatMap(({documentType, title}) => {\n const groupFilters = filters.filter((filter) => {\n const fieldDefinition = getFieldFromFilter(fieldDefinitions, filter)\n return includesDocumentTypes([documentType], fieldDefinition)\n })\n return filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: groupFilters,\n id: title,\n headerTitle: title,\n })\n })\n\n return [...sharedItems, ...groupedItems]\n}\n\n/**\n * Construct a flat list of all pinned filter menu items (both ungrouped and grouped).\n * Un-grouped items should always appear first.\n */\nfunction buildPinnedMenuItems({\n fieldDefinitions,\n filterDefinitions,\n titleFilter,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n titleFilter: string\n}) {\n // Extract all ungrouped pinned filters, these sit above all other items.\n const ungroupedPinnedFilters = Object.values(filterDefinitions)\n .filter(isPinnedFilterDefWithoutGroup)\n .filter((filterDef) => includesTitleInPinnedFilterDefinition(filterDef, titleFilter))\n .map((filterDef) => buildSearchFilter(filterDef))\n\n // Extract grouped pinned filters\n const groupedPinnedFilters = Object.values(filterDefinitions)\n .filter(isPinnedFilterDefWithGroup)\n .filter((filterDef) => includesTitleInPinnedFilterDefinition(filterDef, titleFilter))\n .reduce<Record<string, SearchFilter[]>>((acc, val) => {\n acc[val.group] = acc[val.group] || []\n acc[val.group].push(buildSearchFilter(val))\n return acc\n }, {})\n\n return [\n // Ungrouped\n ...filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters: ungroupedPinnedFilters,\n id: 'pinned-ungrouped',\n tone: 'primary',\n }),\n // Grouped\n ...Object.entries(groupedPinnedFilters).flatMap(([groupTitle, filters]) =>\n filterGroup({\n fieldDefinitions,\n filterDefinitions,\n filters,\n headerTitle: groupTitle,\n id: groupTitle,\n tone: 'primary',\n }),\n ),\n ]\n}\n\nfunction includesDocumentTypes(documentTypes: string[], fieldDefinition?: SearchFieldDefinition) {\n return fieldDefinition?.documentTypes.some((type) => documentTypes.includes(type))\n}\n\nfunction includesTitleInFieldDefinition(field: SearchFieldDefinition, currentTitle: string) {\n const fieldTitle = field.titlePath.join('/')\n return fieldTitle.toLowerCase().includes(currentTitle.toLowerCase())\n}\n\nfunction includesTitleInPinnedFilterDefinition(\n filter: SearchFilterPinnedDefinition,\n currentTitle: string,\n) {\n return filter.title.toLowerCase().includes(currentTitle.toLowerCase())\n}\n\nfunction isPinnedFilterDefWithGroup(\n filterDef: SearchFilterDefinition,\n): filterDef is SearchFilterPinnedDefinition & {group: string} {\n return filterDef.type === 'pinned' && typeof filterDef?.group !== 'undefined'\n}\n\nfunction isPinnedFilterDefWithoutGroup(\n filterDef: SearchFilterDefinition,\n): filterDef is SearchFilterPinnedDefinition {\n return filterDef.type === 'pinned' && typeof filterDef?.group === 'undefined'\n}\n\nfunction sharesDocumentTypes(documentTypes: string[], fieldDefinition?: SearchFieldDefinition) {\n return difference(documentTypes, fieldDefinition?.documentTypes || []).length === 0\n}\n","import {useMemo} from 'react'\n\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../definitions/filters'\nimport {type SearchFilter} from '../../types'\nimport {getFieldFromFilter} from '../../utils/filterUtils'\n\ninterface FilterTitleProps {\n filter: SearchFilter\n maxLength?: number\n}\n\nexport function FilterTitle({filter, maxLength}: FilterTitleProps) {\n const {\n state: {definitions},\n } = useSearchState()\n\n const title = useMemo(() => {\n const filterDef = getFilterDefinition(definitions.filters, filter.filterName)\n switch (filterDef?.type) {\n case 'field': {\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n if (fieldDefinition?.titlePath) {\n return fieldDefinition.titlePath[fieldDefinition.titlePath.length - 1]\n }\n return null\n }\n case 'pinned':\n return filterDef.title\n default:\n return null\n }\n }, [definitions, filter])\n\n if (!title) {\n return null\n }\n\n return maxLength && title.length > maxLength ? (\n <span>{title.slice(0, maxLength)}…</span>\n ) : (\n <span>{title}</span>\n )\n}\n","import {UnknownIcon} from '@sanity/icons/Unknown'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {type SearchFilter} from '../../../types'\n\ninterface FilterIconProps {\n filter: SearchFilter\n}\n\nexport function FilterIcon({filter}: FilterIconProps) {\n const {\n state: {definitions},\n } = useSearchState()\n\n const Icon = getFilterDefinition(definitions.filters, filter.filterName)?.icon\n if (Icon) {\n return <Icon />\n }\n return <UnknownIcon />\n}\n","import {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {Fragment} from 'react'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter} from '../../../utils/filterUtils'\nimport {FilterTitle} from '../../common/FilterTitle'\nimport {FilterIcon} from './FilterIcon'\n\ninterface FilterDetailsProps {\n filter: SearchFilter\n}\n\nexport function FilterDetails({filter}: FilterDetailsProps) {\n const {\n state: {definitions},\n } = useSearchState()\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n\n return (\n <Stack gap={2}>\n {/* Path */}\n {fieldDefinition?.titlePath && fieldDefinition.titlePath?.length > 1 && (\n <Box marginLeft={4}>\n <Text muted size={0}>\n {fieldDefinition.titlePath.slice(0, -1).map((pathTitle, index) => {\n return (\n <Fragment\n // oxlint-disable-next-line no-array-index-key\n key={index}\n >\n <span>{pathTitle}</span>\n {index !== fieldDefinition.titlePath.length - 2 && (\n <span\n style={{\n opacity: 0.75,\n paddingLeft: '0.25em',\n paddingRight: '0.25em',\n }}\n >\n <ChevronRightIcon />\n </span>\n )}\n </Fragment>\n )\n })}\n </Text>\n </Box>\n )}\n\n <Flex align=\"flex-start\" gap={3}>\n <Box style={{flexShrink: 0}}>\n <Text size={1}>\n <FilterIcon filter={filter} />\n </Text>\n </Box>\n <Text size={1} weight=\"medium\">\n <FilterTitle filter={filter} />\n </Text>\n </Flex>\n </Stack>\n )\n}\n","import {isValidElement} from 'react'\nimport {renderToString} from 'react-dom/server'\n\n/**\n * Convert a field value to a string (if it's a React element) and remove HTML tags.\n * If the field value is a string, pass through as-is.\n */\nexport function sanitizeFieldValue(name: string | React.JSX.Element): string {\n if (isValidElement(name)) {\n try {\n return stripHtmlTags(renderToString(name))\n } catch (err) {\n console.warn(\n 'A field title or description contains a React component that could not be rendered. ' +\n 'This is likely caused by a component that requires runtime context. ' +\n 'Use a string or JSX containing HTML elements only.',\n err,\n )\n return ''\n }\n }\n\n return typeof name === 'string' ? name : ''\n}\n\nfunction stripHtmlTags(str: string) {\n return new DOMParser().parseFromString(str, 'text/html')?.body.textContent || ''\n}\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\nimport startCase from 'lodash-es/startCase.js'\nimport uniq from 'lodash-es/uniq.js'\n\nimport {Tooltip} from '../../../../../../../../../ui-components/tooltip/Tooltip'\nimport {TextWithTone} from '../../../../../../../../components/textWithTone/TextWithTone'\nimport {useSchema} from '../../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../../i18n/hooks/useTranslation'\nimport {EMPTY_ARRAY} from '../../../../../../../../util/empty'\nimport {isNonNullable} from '../../../../../../../../util/isNonNullable'\nimport {truncateString} from '../../../../../../../../util/unicodeString'\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\nimport {type SearchFieldDefinition} from '../../../../definitions/fields'\nimport {type SearchFilterDefinition} from '../../../../definitions/filters'\nimport {getSchemaField} from '../../../../utils/getSchemaField'\nimport {sanitizeFieldValue} from '../../../../utils/sanitizeField'\n\ninterface FilterTooltipProps {\n children: React.JSX.Element\n fieldDefinition?: SearchFieldDefinition\n filterDefinition: SearchFilterDefinition\n visible?: boolean\n}\n\nconst MAX_VISIBLE_TYPES = 10\n\nexport function FilterTooltip({\n children,\n fieldDefinition,\n filterDefinition,\n visible,\n}: FilterTooltipProps) {\n const {\n state: {documentTypesNarrowed},\n } = useSearchState()\n const {t} = useTranslation()\n\n const schema = useSchema()\n\n const fieldDefinitionDocumentTypeTitles = fieldDefinition?.documentTypes\n ? fieldDefinition.documentTypes\n .map((d) => {\n const defType = schema.get(d)\n return defType?.title || startCase(defType?.name)\n })\n .filter(isNonNullable)\n .sort()\n : EMPTY_ARRAY\n\n /**\n * Obtain the shared field description for the current field definition.\n * Return a description only if this field description is identical (and defined)\n * across all ALL associated fields.\n */\n let fieldDefinitionDescription: string | undefined\n if (fieldDefinition?.documentTypes) {\n const descriptions = fieldDefinition.documentTypes\n .map((d) => {\n const defType = schema.get(d)\n if (defType) {\n const field = getSchemaField(defType, fieldDefinition.fieldPath)\n // Sanitize schema descriptions (which may either be a string or React element)\n return field?.type.description && sanitizeFieldValue(field?.type.description)\n }\n return null\n })\n .filter(isNonNullable)\n .sort()\n\n const uniqueDescriptions = uniq(descriptions)\n if (uniqueDescriptions.length === 1) {\n fieldDefinitionDescription = uniqueDescriptions[0]\n }\n }\n\n return (\n <Tooltip\n content={\n <Card tone=\"default\" radius={2} style={{maxWidth: '250px'}}>\n <Stack gap={4}>\n {/* Field name */}\n {fieldDefinition && (\n <Stack gap={3}>\n <Text muted size={1} weight=\"medium\">\n {t('search.filter-field-tooltip-name')}\n </Text>\n <TextWithTone\n size={1}\n style={{fontFamily: 'monospace'}}\n tone=\"primary\"\n textOverflow=\"ellipsis\"\n >\n {fieldDefinition?.name}\n </TextWithTone>\n </Stack>\n )}\n\n {/* Field description */}\n {fieldDefinitionDescription && (\n <Stack gap={3}>\n <Text muted size={1} weight=\"medium\">\n {t('search.filter-field-tooltip-description')}\n </Text>\n <Text muted size={1}>\n {truncateString(fieldDefinitionDescription, 256)}\n </Text>\n </Stack>\n )}\n\n {/* Filter description */}\n {filterDefinition?.description && (\n <Text muted size={1}>\n {truncateString(filterDefinition.description, 256)}\n </Text>\n )}\n\n {/* Field document titles */}\n {!documentTypesNarrowed.length && fieldDefinitionDocumentTypeTitles.length > 0 && (\n <Stack gap={2}>\n <Flex align=\"center\" gap={1}>\n <Text muted size={1} weight=\"medium\">\n {t('search.filter-field-tooltip-used-in-document-types')}\n </Text>\n <Card padding={1} radius={2} tone=\"transparent\">\n <Text size={1} muted>\n {fieldDefinitionDocumentTypeTitles.length}\n </Text>\n </Card>\n </Flex>\n <Text size={1} weight=\"regular\" muted>\n {fieldDefinitionDocumentTypeTitles.slice(0, MAX_VISIBLE_TYPES).join(', ')}\n {fieldDefinitionDocumentTypeTitles?.length > MAX_VISIBLE_TYPES\n ? ` +${fieldDefinitionDocumentTypeTitles.length - MAX_VISIBLE_TYPES} more`\n : ''}\n </Text>\n </Stack>\n )}\n </Stack>\n </Card>\n }\n disabled={!visible}\n fallbackPlacements={['left']}\n placement=\"right\"\n portal\n >\n {children}\n </Tooltip>\n )\n}\n","import {\n Box,\n // oxlint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children.\n type ResponsiveMarginProps,\n type ResponsivePaddingProps,\n} from '@sanity/ui'\nimport {memo, useCallback} from 'react'\n\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\nimport {type FilterMenuItemFilter} from '../../../../types'\nimport {getFilterKey} from '../../../../utils/filterUtils'\nimport {FilterDetails} from '../../common/FilterDetails'\nimport {FilterTooltip} from './FilterTooltip'\n\ninterface FilterMenuItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n item: FilterMenuItemFilter\n onClose: () => void\n}\n\nexport const MenuItemFilter = memo(function MenuItemFilter({\n item,\n onClose,\n ...rest\n}: FilterMenuItemProps) {\n const {\n dispatch,\n state: {filters},\n } = useSearchState()\n\n const handleClick = useCallback(() => {\n dispatch({filter: item.filter, type: 'TERMS_FILTERS_ADD'})\n onClose?.()\n }, [dispatch, item.filter, onClose])\n\n const isAlreadyActive = !!filters.find((f) => getFilterKey(f) === getFilterKey(item.filter))\n\n // Only enable tooltips if an associated field definition exists, or the filter has a valid description\n const tooltipEnabled = !!(item.fieldDefinition || item.filterDefinition.description)\n\n return (\n <Box {...rest}>\n <Button\n disabled={isAlreadyActive}\n fontSize={1}\n justify=\"flex-start\"\n mode=\"bleed\"\n onClick={isAlreadyActive ? undefined : handleClick}\n padding={0}\n style={{position: 'relative', whiteSpace: 'normal', width: '100%'}}\n tabIndex={-1}\n tone={item?.tone}\n >\n <FilterTooltip\n fieldDefinition={item.fieldDefinition}\n filterDefinition={item.filterDefinition}\n visible={tooltipEnabled}\n >\n <Box padding={3}>\n <FilterDetails filter={item.filter} />\n </Box>\n </FilterTooltip>\n </Button>\n </Box>\n )\n})\n","import {Box, Card, Text} from '@sanity/ui'\nimport {memo} from 'react'\n\nimport {type FilterMenuItemHeader} from '../../../../types'\n\ninterface MenuItemHeaderFields {\n item: FilterMenuItemHeader\n}\n\nexport const MenuItemHeader = memo(function MenuItemHeader({item}: MenuItemHeaderFields) {\n return (\n <Box paddingTop={1}>\n <Card borderBottom paddingX={2} paddingY={3} tone={item?.tone}>\n <Text muted size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n {item.title}\n </Text>\n </Card>\n </Box>\n )\n})\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useMemo, useState} from 'react'\n\nimport {CommandList} from '../../../../../../../components/commandList/CommandList'\nimport {\n type CommandListGetItemDisabledCallback,\n type CommandListRenderItemCallback,\n} from '../../../../../../../components/commandList/types'\nimport {useSchema} from '../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type FilterMenuItem} from '../../../types'\nimport {getFilterKey} from '../../../utils/filterUtils'\nimport {FilterPopoverContentHeader} from '../common/FilterPopoverContentHeader'\nimport {createFilterMenuItems} from './createFilterMenuItems'\nimport {MenuItemFilter} from './items/MenuItemFilter'\nimport {MenuItemHeader} from './items/MenuItemHeader'\n\ninterface AddFilterPopoverContentProps {\n onClose: () => void\n}\n\nconst POPOVER_STYLES = {width: '300px'}\n\nexport function AddFilterPopoverContent({onClose}: AddFilterPopoverContentProps) {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n const [titleFilter, setTitleFilter] = useState('')\n const {t} = useTranslation()\n\n const handleFilterChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => setTitleFilter(e.currentTarget.value),\n [setTitleFilter],\n )\n const handleFilterClear = useCallback(() => setTitleFilter(''), [])\n\n const schema = useSchema()\n\n const {\n state: {\n documentTypesNarrowed,\n definitions,\n filters,\n terms: {types},\n },\n } = useSearchState()\n\n const filteredMenuItems = useMemo(\n () =>\n createFilterMenuItems({\n documentTypesNarrowed,\n fieldDefinitions: definitions.fields,\n filterDefinitions: definitions.filters,\n schema,\n titleFilter,\n types,\n t,\n }),\n [documentTypesNarrowed, definitions.fields, definitions.filters, schema, titleFilter, types, t],\n )\n\n const renderItem = useCallback<CommandListRenderItemCallback<FilterMenuItem>>(\n (item) => {\n if (item.type === 'filter') {\n return <MenuItemFilter item={item} onClose={onClose} paddingBottom={1} />\n }\n if (item.type === 'header') {\n return <MenuItemHeader item={item} />\n }\n return null\n },\n [onClose],\n )\n\n const getItemDisabled = useCallback<CommandListGetItemDisabledCallback>(\n (index) => {\n const filterItem = filteredMenuItems[index]\n return (\n filterItem.type !== 'filter' ||\n !!filters.find((f) => getFilterKey(f) === getFilterKey(filterItem.filter))\n )\n },\n [filteredMenuItems, filters],\n )\n\n const getItemKey = useCallback(\n (index: number) => {\n const menuItem = filteredMenuItems[index]\n switch (menuItem.type) {\n case 'filter':\n return [\n ...(menuItem.group ? [menuItem.group] : []), //\n getFilterKey(menuItem.filter),\n ].join('-')\n case 'header':\n return `${menuItem.type}-${menuItem.title}`\n default:\n return index\n }\n },\n [filteredMenuItems],\n )\n\n return (\n <Flex direction=\"column\" style={POPOVER_STYLES}>\n {/* Filter header */}\n <FilterPopoverContentHeader\n ariaInputLabel={t('search.filter-by-title-aria-label')}\n onChange={handleFilterChange}\n onClear={handleFilterClear}\n ref={setInputElement}\n typeFilter={titleFilter}\n />\n\n <Flex>\n {filteredMenuItems.length > 0 && (\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.filters-aria-label', {count: filteredMenuItems.length})}\n autoFocus=\"input\"\n getItemDisabled={getItemDisabled}\n getItemKey={getItemKey}\n inputElement={inputElement}\n itemHeight={45}\n items={filteredMenuItems}\n overscan={20}\n padding={1}\n paddingBottom={0}\n renderItem={renderItem}\n />\n )}\n\n {/* No results */}\n {filteredMenuItems.length == 0 && (\n <Box padding={3}>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {t('search.filter-no-matches-found', {filter: titleFilter})}\n </Text>\n </Box>\n )}\n </Flex>\n </Flex>\n )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useRef, useState} from 'react'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {Popover} from '../../../../../../../../ui-components/popover/Popover'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {AddFilterPopoverContent} from './AddFilterPopoverContent'\n\nexport function AddFilterButton() {\n const [open, setOpen] = useState(false)\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const {t} = useTranslation()\n\n const {\n state: {fullscreen},\n } = useSearchState()\n\n const handleClose = useCallback(() => setOpen(false), [])\n const handleOpen = useCallback(() => setOpen(true), [])\n\n useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n return (\n <Popover\n __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n content={\n <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n <AddFilterPopoverContent onClose={handleClose} />\n </FilterPopoverWrapper>\n }\n open={open}\n placement=\"bottom-start\"\n radius={POPOVER_RADIUS}\n ref={popoverRef}\n portal\n >\n <Button\n icon={AddIcon}\n mode=\"bleed\"\n onClick={handleOpen}\n size={fullscreen ? 'large' : 'default'}\n ref={setButtonElement}\n selected={open}\n text={t('search.action.add-filter')}\n />\n </Popover>\n )\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\n\nexport function DebugDocumentTypesNarrowed() {\n const {\n state: {documentTypesNarrowed},\n } = useSearchState()\n\n return (\n <Card borderTop padding={4} tone=\"transparent\">\n <Stack gap={3}>\n <Code size={1} weight=\"medium\">\n Document types (narrowed)\n </Code>\n <Code size={1} style={{whiteSpace: 'normal'}}>\n {documentTypesNarrowed.length > 0 ? documentTypesNarrowed.join(', ') : '(All)'}\n </Code>\n </Stack>\n </Card>\n )\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\n\nexport function DebugFilterQuery() {\n const {\n state: {\n terms: {filter},\n },\n } = useSearchState()\n\n if (!filter) {\n return null\n }\n\n return (\n <Card padding={4} tone=\"transparent\">\n <Stack gap={3}>\n <Code size={1} weight=\"medium\">\n Filter\n </Code>\n {filter && (\n <Code size={1} style={{whiteSpace: 'normal'}}>\n {filter}\n </Code>\n )}\n </Stack>\n </Card>\n )\n}\n","import {CheckmarkIcon} from '@sanity/icons/Checkmark'\nimport {type SchemaType} from '@sanity/types'\nimport {Box, type ResponsiveMarginProps, type ResponsivePaddingProps} from '@sanity/ui'\nimport {memo, useCallback} from 'react'\n\nimport {Button} from '../../../../../../../../../ui-components/button/Button'\nimport {useSearchState} from '../../../../contexts/search/useSearchState'\n\ninterface DocumentTypeFilterItemProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n selected: boolean\n type: SchemaType\n}\n\nexport const DocumentTypeFilterItem = memo(function TypeFilterItem({\n selected,\n type,\n ...rest\n}: DocumentTypeFilterItemProps) {\n const {dispatch} = useSearchState()\n\n const handleTypeAdd = useCallback(() => {\n dispatch({type: 'TERMS_TYPE_ADD', schemaType: type})\n }, [dispatch, type])\n\n const handleTypeRemove = useCallback(() => {\n dispatch({type: 'TERMS_TYPE_REMOVE', schemaType: type})\n }, [dispatch, type])\n\n const handleClick = useCallback(() => {\n if (selected) {\n handleTypeRemove()\n } else {\n handleTypeAdd()\n }\n }, [handleTypeAdd, handleTypeRemove, selected])\n\n return (\n <Box {...rest}>\n <Button\n key={type.title ?? type.name}\n iconRight={selected && CheckmarkIcon}\n justify=\"flex-start\"\n mode=\"bleed\"\n onClick={handleClick}\n width=\"fill\"\n size=\"large\"\n tabIndex={-1}\n text={type.title ?? type.name}\n tone={selected ? 'primary' : 'default'}\n />\n </Box>\n )\n})\n","import {type Schema, type SchemaType} from '@sanity/types'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {MenuDivider} from '@sanity/ui/menu'\nimport partition from 'lodash-es/partition.js'\nimport {type ChangeEvent, useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {CommandList} from '../../../../../../../components/commandList/CommandList'\nimport {\n type CommandListGetItemSelectedCallback,\n type CommandListHandle,\n type CommandListRenderItemCallback,\n} from '../../../../../../../components/commandList/types'\nimport {useSchema} from '../../../../../../../hooks/useSchema'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type DocumentTypeMenuItem} from '../../../types'\nimport {getSelectableOmnisearchTypes} from '../../../utils/selectors'\nimport {FilterPopoverContentHeader} from '../common/FilterPopoverContentHeader'\nimport {DocumentTypeFilterItem} from './items/DocumentTypeFilterItem'\n\nconst ClearButtonBox = styled(Box)`\n border-top: 1px solid\n ${({theme}) => theme.sanity.color.base.border /* oxlint-disable-line no-deprecated -- will fix in follow up PR */};\n flex-shrink: 0;\n`\n\nconst POPOVER_STYLES = {width: '250px'}\n\nexport function DocumentTypesPopoverContent() {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n const [typeFilter, setTypeFilter] = useState('')\n const commandListRef = useRef<CommandListHandle | null>(null)\n const {t} = useTranslation()\n\n const schema = useSchema()\n\n const {\n dispatch,\n state: {\n terms: {types: selectedTypes},\n },\n } = useSearchState()\n\n // Get a snapshot of initial selected types\n const [selectedTypesSnapshot, setSelectedTypesSnapshot] = useState(selectedTypes)\n\n const documentTypeItems = useGetDocumentTypeItems(\n schema,\n selectedTypes,\n selectedTypesSnapshot,\n typeFilter,\n )\n\n const handleFilterChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => setTypeFilter(e.currentTarget.value),\n [setTypeFilter],\n )\n const handleFilterClear = useCallback(() => setTypeFilter(''), [])\n\n const handleTypesClear = useCallback(() => {\n setSelectedTypesSnapshot([])\n dispatch({type: 'TERMS_TYPES_CLEAR'})\n\n // Re-focus the command list input element\n commandListRef?.current?.focusInputElement()\n commandListRef?.current?.scrollToIndex(0)\n }, [dispatch])\n\n const getItemKey = useCallback(\n (index: number) => {\n const virtualItem = documentTypeItems[index]\n switch (virtualItem.type) {\n case 'divider':\n return `${virtualItem.type}-${index}`\n case 'header':\n return `${virtualItem.type}-${virtualItem.title}`\n case 'item':\n return `${virtualItem.type}-${virtualItem.item.name}`\n default:\n return index\n }\n },\n [documentTypeItems],\n )\n\n const renderItem = useCallback<CommandListRenderItemCallback<DocumentTypeMenuItem>>((item) => {\n if (item.type === 'divider') {\n return (\n <Box paddingY={1}>\n <MenuDivider />\n </Box>\n )\n }\n if (item.type === 'header') {\n return (\n <Box margin={2} padding={1}>\n <Text muted size={1} weight=\"medium\">\n {item.title}\n </Text>\n </Box>\n )\n }\n if (item.type === 'item') {\n return <DocumentTypeFilterItem paddingBottom={1} selected={item.selected} type={item.item} />\n }\n return null\n }, [])\n\n const getItemDisabled = useCallback<CommandListGetItemSelectedCallback>(\n (index) => {\n const item = documentTypeItems[index]\n return item.type !== 'item'\n },\n [documentTypeItems],\n )\n\n const getItemSelected = useCallback<CommandListGetItemSelectedCallback>(\n (index) => {\n const item = documentTypeItems[index]\n return item.type === 'item' && item.selected\n },\n [documentTypeItems],\n )\n\n return (\n <Flex direction=\"column\" style={POPOVER_STYLES}>\n {/* Search header */}\n <FilterPopoverContentHeader\n ariaInputLabel={t('search.action.filter-by-document-type-aria-label')}\n onChange={handleFilterChange}\n onClear={handleFilterClear}\n ref={setInputElement}\n typeFilter={typeFilter}\n />\n\n <Flex>\n {documentTypeItems.length > 0 && (\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.document-types-aria-label')}\n ariaMultiselectable\n autoFocus=\"input\"\n getItemDisabled={getItemDisabled}\n getItemSelected={getItemSelected}\n getItemKey={getItemKey}\n inputElement={inputElement}\n itemHeight={37}\n items={documentTypeItems}\n overscan={20}\n padding={1}\n paddingBottom={0}\n ref={commandListRef}\n renderItem={renderItem}\n />\n )}\n\n {/* No results */}\n {!documentTypeItems.length && (\n <Box padding={3}>\n <Text muted size={1} textOverflow=\"ellipsis\">\n {t('search.document-types-no-matches-found', {filter: typeFilter})}\n </Text>\n </Box>\n )}\n </Flex>\n\n {/* Clear button */}\n {!typeFilter && selectedTypes.length > 0 && (\n <ClearButton onClick={handleTypesClear} selectedTypes={selectedTypes} />\n )}\n </Flex>\n )\n}\n\nfunction ClearButton({onClick, selectedTypes}: {onClick: () => void; selectedTypes: SchemaType[]}) {\n const {t} = useTranslation()\n\n return (\n <ClearButtonBox padding={1}>\n <Stack>\n <Button\n aria-label={t('search.action.clear-type-filters-aria-label')}\n data-name=\"type-filter-button\"\n disabled={selectedTypes.length === 0}\n mode=\"bleed\"\n onClick={onClick}\n text={t('search.action.clear-type-filters-label')}\n tone=\"primary\"\n />\n </Stack>\n </ClearButtonBox>\n )\n}\n\nfunction useGetDocumentTypeItems(\n schema: Schema,\n selectedTypes: SchemaType[],\n selectedTypesSnapshot: SchemaType[],\n typeFilter: string,\n) {\n return useMemo(() => {\n const [itemsSelected, itemsUnselected] = partition(\n getSelectableOmnisearchTypes(schema, typeFilter),\n (type) => selectedTypesSnapshot.includes(type),\n )\n\n const hasSelectedItems = itemsSelected.length > 0\n const hasUnselectedItems = itemsSelected.length > 0\n\n const items: DocumentTypeMenuItem[] = []\n if (hasSelectedItems) {\n items.push({title: 'Selected', type: 'header'})\n }\n itemsSelected.forEach((item) =>\n items.push({item, selected: selectedTypes.includes(item), type: 'item'}),\n )\n if (hasSelectedItems && hasUnselectedItems) {\n items.push({type: 'divider'})\n }\n itemsUnselected.forEach((item) =>\n items.push({item, selected: selectedTypes.includes(item), type: 'item'}),\n )\n\n return items\n }, [schema, selectedTypes, selectedTypesSnapshot, typeFilter])\n}\n","import {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {type Placement, useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {Popover} from '../../../../../../../../ui-components/popover/Popover'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {documentTypesTruncated} from '../../../utils/documentTypesTruncated'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {DocumentTypesPopoverContent} from './DocumentTypesPopoverContent'\n\nconst FALLBACK_PLACEMENTS: Placement[] = ['top-start', 'bottom-start']\n\nexport function DocumentTypesButton() {\n const [open, setOpen] = useState(false)\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const {\n state: {\n fullscreen,\n terms: {types},\n },\n } = useSearchState()\n const {t} = useTranslation()\n\n const handleClose = useCallback(() => setOpen(false), [])\n const handleOpen = useCallback(() => setOpen(true), [])\n\n useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n const title = useMemo(() => documentTypesTruncated({types, t}), [types, t])\n\n return (\n <Popover\n __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n content={\n <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n <DocumentTypesPopoverContent />\n </FilterPopoverWrapper>\n }\n open={open}\n placement=\"bottom-start\"\n fallbackPlacements={FALLBACK_PLACEMENTS}\n portal\n radius={POPOVER_RADIUS}\n ref={popoverRef}\n >\n <Button\n iconRight={ChevronDownIcon}\n mode=\"ghost\"\n onClick={handleOpen}\n size={fullscreen ? 'large' : 'default'}\n ref={setButtonElement}\n selected={open}\n text={title}\n tone=\"default\"\n />\n </Popover>\n )\n}\n","import {Box, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {TextWithTone} from '../../../../../../components/textWithTone/TextWithTone'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {Translate, type TranslateComponentMap} from '../../../../../../i18n/Translate'\nimport {type TFunction} from '../../../../../../i18n/types'\nimport {isRecord} from '../../../../../../util/isRecord'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getOperatorDefinition} from '../../definitions/operators'\nimport {type SearchFilter, type SearchFilterValues} from '../../types'\nimport {FilterTitle} from './FilterTitle'\n\ninterface FilterLabelProps {\n filter: SearchFilter\n fontSize?: number\n showContent?: boolean\n}\n\nconst CustomBox = styled(Box)<{$flexShrink?: number}>`\n flex-shrink: ${({$flexShrink = 0}) => $flexShrink};\n`\n\nexport function FilterLabel({filter, fontSize = 1, showContent = true}: FilterLabelProps) {\n const {t} = useTranslation()\n const {\n state: {definitions, fullscreen},\n } = useSearchState()\n\n const operator = getOperatorDefinition(definitions.operators, filter.operatorType)\n\n const ButtonValue = operator?.buttonValueComponent\n const filterValue = filter.value\n\n const components: TranslateComponentMap = useMemo(\n () => ({\n Field: () => (\n <CustomBox $flexShrink={fullscreen ? 1 : 0}>\n <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n <FilterTitle filter={filter} maxLength={fullscreen ? 25 : 40} />\n </TextWithTone>\n </CustomBox>\n ),\n Operator: ({children}) =>\n showContent ? (\n <CustomBox $flexShrink={0}>\n <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"regular\">\n {children}\n </TextWithTone>\n </CustomBox>\n ) : null,\n Value: ({children}) =>\n showContent ? (\n <CustomBox $flexShrink={1}>\n <TextWithTone tone=\"default\" size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {ButtonValue ? <ButtonValue value={filterValue} /> : children}\n </TextWithTone>\n </CustomBox>\n ) : null,\n }),\n [filter, fontSize, fullscreen, showContent, ButtonValue, filterValue],\n )\n\n if (!operator?.descriptionKey) {\n console.warn('Missing `descriptionKey` for operator `%s`', filter.operatorType)\n }\n\n if (!showContent || !operator?.descriptionKey) {\n const Field = components.Field\n return (\n <Flex align=\"center\" gap={1}>\n <Field />\n </Flex>\n )\n }\n\n return (\n <Flex align=\"center\" gap={1}>\n <Translate\n t={t}\n i18nKey={operator?.descriptionKey}\n components={components}\n values={getFilterValues(filter, t)}\n />\n </Flex>\n )\n}\n\nfunction getFilterValues(filter: SearchFilter, t: TFunction): SearchFilterValues {\n const values: SearchFilterValues = {}\n if (typeof filter.value === 'number') {\n values.count = filter.value\n }\n if (isStringOrNumber(filter.value)) {\n values.value = filter.value\n }\n if (typeof filter.value === 'boolean') {\n // Cast boolean into a string value\n values.value = filter.value ? t('search.filter-boolean-true') : t('search.filter-boolean-false')\n }\n if (isRecord(filter.value) && 'from' in filter.value && isStringOrNumber(filter.value.from)) {\n values.from = filter.value.from\n }\n if (isRecord(filter.value) && 'to' in filter.value && isStringOrNumber(filter.value.to)) {\n values.to = filter.value.to\n }\n return values\n}\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number'\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter} from '../../../utils/filterUtils'\n\ninterface DebugDocumentTypesProps {\n filter: SearchFilter\n}\n\nexport function DebugDocumentTypes({filter}: DebugDocumentTypesProps) {\n const {\n state: {\n definitions: {fields},\n },\n } = useSearchState()\n const fieldDefinition = getFieldFromFilter(fields, filter)\n\n return (\n <Card borderTop padding={3} tone=\"transparent\">\n <Stack gap={2}>\n <Code size={0} weight=\"medium\">\n Document types\n </Code>\n <Code size={0} style={{whiteSpace: 'normal'}}>\n {fieldDefinition?.documentTypes && fieldDefinition.documentTypes.length > 0\n ? fieldDefinition.documentTypes?.join(', ')\n : '(all)'}\n </Code>\n </Stack>\n </Card>\n )\n}\n","import {Card, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\n\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter} from '../../../utils/filterUtils'\n\ninterface DebugFilterValuesProps {\n filter: SearchFilter\n}\n\nexport function DebugFilterValues({filter}: DebugFilterValuesProps) {\n const {\n state: {definitions},\n } = useSearchState()\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n\n return (\n <Card borderTop padding={3} tone=\"transparent\">\n <Stack gap={2}>\n <Code size={0} weight=\"medium\">\n Filter\n </Code>\n {fieldDefinition?.fieldPath && <Code size={0}>fieldPath: {fieldDefinition.fieldPath}</Code>}\n <Code size={0} style={{whiteSpace: 'normal'}}>\n filterName: {filter.filterName}\n </Code>\n <Code size={0} style={{whiteSpace: 'normal'}}>\n operatorType: {filter.operatorType}\n </Code>\n <Code size={0} style={{whiteSpace: 'normal'}}>\n value: {typeof filter?.value === 'undefined' ? '' : JSON.stringify(filter.value)}\n </Code>\n </Stack>\n </Card>\n )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Flex, type ResponsivePaddingProps, Stack} from '@sanity/ui'\n\nimport {TextWithTone} from '../../../../../../../components/textWithTone/TextWithTone'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\n\nexport function FilterError(props: ResponsivePaddingProps) {\n const {t} = useTranslation()\n\n return (\n <Box {...props}>\n <Flex align=\"flex-start\" gap={3}>\n <TextWithTone tone=\"critical\">\n <ErrorOutlineIcon />\n </TextWithTone>\n <Stack gap={4}>\n <TextWithTone size={1} tone=\"critical\" weight=\"medium\">\n {t('search.error.display-filter-title')}\n </TextWithTone>\n <TextWithTone size={1} tone=\"critical\">\n {t('search.error.display-filter-description')}\n </TextWithTone>\n </Stack>\n </Flex>\n </Box>\n )\n}\n","import {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {Inline} from '@sanity/ui'\nimport {Menu, MenuDivider} from '@sanity/ui/menu'\nimport {useCallback, useId} from 'react'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {MenuButton} from '../../../../../../../../ui-components/menuButton/MenuButton'\nimport {MenuItem} from '../../../../../../../../ui-components/menuItem/MenuItem'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {getOperatorDefinition, type SearchOperatorDefinition} from '../../../definitions/operators'\nimport {type SearchFilter} from '../../../types'\nimport {getFilterKey} from '../../../utils/filterUtils'\n\ninterface OperatorsMenuButtonProps {\n filter: SearchFilter\n operator?: SearchOperatorDefinition\n}\n\nfunction CustomMenuItem({\n onClick,\n operator,\n selected,\n}: {\n onClick: (operatorType: string) => void\n operator: SearchOperatorDefinition\n selected: boolean\n}) {\n const handleClick = useCallback(() => onClick(operator.type), [onClick, operator.type])\n const {t} = useTranslation()\n\n return (\n <MenuItem\n onClick={handleClick}\n pressed={selected}\n tone=\"default\"\n text={t(operator.nameKey)}\n iconRight={operator?.icon}\n />\n )\n}\n\nexport function OperatorsMenuButton({filter, operator}: OperatorsMenuButtonProps) {\n const menuButtonId = useId()\n\n const {t} = useTranslation()\n const {dispatch, state} = useSearchState()\n const operatorItems = getFilterDefinition(state.definitions.filters, filter.filterName)?.operators\n\n const handleClick = useCallback(\n (operatorType: string) => {\n dispatch({\n filterKey: getFilterKey(filter),\n operatorType,\n type: 'TERMS_FILTERS_SET_OPERATOR',\n })\n },\n [dispatch, filter],\n )\n\n if (!operator || !operatorItems || operatorItems.length <= 1) {\n return null\n }\n\n return (\n <Inline>\n <MenuButton\n button={<Button mode=\"ghost\" iconRight={ChevronDownIcon} text={t(operator.nameKey)} />}\n id={menuButtonId || ''}\n menu={\n <Menu>\n {operatorItems.map((item, index) => {\n if (item.type === 'item') {\n const menuOperator = getOperatorDefinition(state.definitions.operators, item.name)\n if (!menuOperator) {\n return null\n }\n return (\n <CustomMenuItem\n // oxlint-disable-next-line no-array-index-key\n key={index}\n onClick={handleClick}\n operator={menuOperator}\n selected={operator.type === item.name}\n />\n )\n }\n if (item.type === 'divider') {\n // oxlint-disable-next-line no-array-index-key\n return <MenuDivider key={index} />\n }\n return null\n })}\n </Menu>\n }\n popover={{\n placement: 'bottom-start',\n constrainSize: true,\n portal: false,\n radius: 2,\n }}\n />\n </Inline>\n )\n}\n","import {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {type ErrorInfo, useCallback, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\n\nimport {Button} from '../../../../../../../../ui-components/button/Button'\nimport {ErrorBoundary} from '../../../../../../../../ui-components/errorBoundary/ErrorBoundary'\nimport {supportsTouch} from '../../../../../../../util/supportsTouch'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {getFilterDefinition} from '../../../definitions/filters'\nimport {getOperatorDefinition} from '../../../definitions/operators'\nimport {type SearchFilter} from '../../../types'\nimport {getFieldFromFilter, getFilterKey} from '../../../utils/filterUtils'\nimport {FilterDetails} from '../common/FilterDetails'\nimport {FilterError} from './FilterError'\nimport {OperatorsMenuButton} from './OperatorsMenuButton'\n\ninterface FilterFormProps {\n filter: SearchFilter\n}\n\ninterface ErrorParams {\n error: Error\n info: ErrorInfo\n}\n\nexport function FilterForm({filter}: FilterFormProps) {\n const [errorParams, setErrorParams] = useState<ErrorParams | null>(null)\n const {\n dispatch,\n state: {definitions, fullscreen},\n } = useSearchState()\n\n const filterDefinition = getFilterDefinition(definitions.filters, filter.filterName)\n const operator = getOperatorDefinition(definitions.operators, filter.operatorType)\n const fieldDefinition = getFieldFromFilter(definitions.fields, filter)\n const filterKey = getFilterKey(filter)\n\n const handleClose = useCallback(() => {\n dispatch({\n filterKey: getFilterKey(filter),\n type: 'TERMS_FILTERS_REMOVE',\n })\n }, [dispatch, filter])\n\n const handleValueChange = useCallback(\n (value: any) => {\n dispatch({\n filterKey: filterKey,\n type: 'TERMS_FILTERS_SET_VALUE',\n value,\n })\n },\n [dispatch, filterKey],\n )\n\n const handleCatchError = useCallback((params: ErrorParams) => {\n setErrorParams(params)\n }, [])\n\n const Component = operator?.inputComponent\n\n if (errorParams) {\n return <FilterError padding={4} />\n }\n\n // Flex order is reversed to ensure form inputs are focusable first\n return (\n <ErrorBoundary onCatch={handleCatchError}>\n <FocusLock autoFocus={!supportsTouch} returnFocus>\n <Flex direction=\"column-reverse\">\n {/* Value */}\n {Component && (\n <Card borderTop padding={3}>\n <Component\n // re-render on new operators\n key={filter.operatorType}\n fieldDefinition={fieldDefinition}\n onChange={handleValueChange}\n value={filter.value}\n />\n </Card>\n )}\n\n {/* Title, description and operator */}\n <Card padding={3}>\n <Stack gap={3}>\n <Flex align=\"flex-start\" gap={3} justify=\"space-between\">\n <Box paddingLeft={1} paddingRight={2} paddingY={1}>\n <FilterDetails filter={filter} />\n </Box>\n\n {fullscreen && (\n <Button\n icon={TrashIcon}\n mode=\"bleed\"\n onClick={handleClose}\n tone=\"critical\"\n tooltipProps={{content: 'Remove filter'}}\n />\n )}\n </Flex>\n {filterDefinition?.description && (\n <Card border padding={3} radius={2} tone=\"transparent\">\n <Text muted size={1}>\n {filterDefinition.description}\n </Text>\n </Card>\n )}\n <OperatorsMenuButton filter={filter} operator={operator} />\n </Stack>\n </Card>\n </Flex>\n </FocusLock>\n </ErrorBoundary>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {DEBUG_MODE} from '../../../constants'\nimport {type SearchFilter} from '../../../types'\nimport {DebugDocumentTypes} from '../debug/_DebugDocumentTypes'\nimport {DebugFilterValues} from '../debug/_DebugFilterValues'\nimport {FilterForm} from './FilterForm'\n\ninterface FilterPopoverContentProps {\n filter: SearchFilter\n}\n\nconst ContainerFlex = styled(Flex)`\n max-width: 480px;\n min-width: 150px;\n overflow: hidden;\n overflow: clip;\n width: 100%;\n`\n\nexport function FilterPopoverContent({filter}: FilterPopoverContentProps) {\n return (\n <ContainerFlex direction=\"column\">\n <FilterForm filter={filter} />\n\n {/* Debug panels */}\n {DEBUG_MODE && (\n <>\n <DebugFilterValues filter={filter} />\n <DebugDocumentTypes filter={filter} />\n </>\n )}\n </ContainerFlex>\n )\n}\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {\n // oxlint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children behavior.\n Card,\n rem,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {type KeyboardEvent, useCallback, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Popover} from '../../../../../../../../ui-components/popover/Popover'\nimport {useTranslation} from '../../../../../../../i18n/hooks/useTranslation'\nimport {POPOVER_RADIUS, POPOVER_VERTICAL_MARGIN} from '../../../constants'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type SearchFilter} from '../../../types'\nimport {getFilterKey, validateFilter} from '../../../utils/filterUtils'\nimport {FilterLabel} from '../../common/FilterLabel'\nimport {FilterPopoverWrapper} from '../common/FilterPopoverWrapper'\nimport {FilterPopoverContent} from './FilterPopoverContent'\n\ninterface FilterButtonProps {\n filter: SearchFilter\n initialOpen?: boolean\n}\n\nconst CloseButton = styled(Button)`\n border-radius: ${({theme}) =>\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n `0 ${rem(theme.sanity.radius[2])} ${rem(theme.sanity.radius[2])} 0`};\n`\n\nconst CloseCard = styled(Card)`\n position: absolute;\n right: 0;\n`\n\nconst ContainerDiv = styled.div`\n align-items: center;\n display: inline-flex;\n max-width: 100%;\n position: relative;\n`\n\nconst LabelButton = styled(Button)`\n border: none;\n width: 100%;\n`\n\nexport function FilterButton({filter, initialOpen}: FilterButtonProps) {\n const [open, setOpen] = useState(initialOpen)\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n\n const {\n dispatch,\n state: {definitions, fullscreen},\n } = useSearchState()\n\n const {t} = useTranslation()\n\n const handleClose = useCallback(() => setOpen(false), [])\n const handleOpen = useCallback(() => setOpen(true), [])\n const handleRemove = useCallback(\n () =>\n dispatch({\n filterKey: getFilterKey(filter),\n type: 'TERMS_FILTERS_REMOVE',\n }),\n [dispatch, filter],\n )\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n if (['Backspace', 'Delete'].includes(event.key)) {\n handleRemove()\n }\n },\n [handleRemove],\n )\n\n useClickOutsideEvent(handleClose, () => [buttonElement, popoverRef.current])\n\n const isValid = validateFilter({\n fieldDefinitions: definitions.fields,\n filter,\n filterDefinitions: definitions.filters,\n operatorDefinitions: definitions.operators,\n })\n\n return (\n <Popover\n __unstable_margins={[POPOVER_VERTICAL_MARGIN, 0, 0, 0]}\n content={\n <FilterPopoverWrapper anchorElement={buttonElement} onClose={handleClose}>\n <FilterPopoverContent filter={filter} />\n </FilterPopoverWrapper>\n }\n constrainSize\n open={open}\n overflow=\"auto\"\n placement=\"bottom-start\"\n portal\n radius={POPOVER_RADIUS}\n ref={popoverRef}\n >\n <ContainerDiv>\n <Card\n __unstable_focusRing\n display=\"flex\"\n radius={2}\n tone={isValid ? 'primary' : 'transparent'}\n >\n <LabelButton\n mode=\"bleed\"\n onClick={handleOpen}\n onKeyDown={handleKeyDown}\n paddingLeft={fullscreen ? 3 : 2}\n paddingRight={fullscreen ? 3 : 5}\n paddingY={fullscreen ? 3 : 2}\n ref={setButtonElement}\n >\n <FilterLabel filter={filter} showContent={isValid} />\n </LabelButton>\n </Card>\n\n {!fullscreen && (\n <CloseCard\n __unstable_focusRing\n display=\"flex\"\n radius={2}\n tone={isValid ? 'primary' : 'transparent'}\n >\n <CloseButton\n aria-label={t('search.action.remove-filter-aria-label')}\n fontSize={1}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={handleRemove}\n onKeyDown={handleKeyDown}\n padding={2}\n radius={2}\n />\n </CloseCard>\n )}\n </ContainerDiv>\n </Popover>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\n\nimport {Button} from '../../../../../../../ui-components/button/Button'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {DEBUG_MODE} from '../../constants'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {getFilterKey} from '../../utils/filterUtils'\nimport {AddFilterButton} from './addFilter/AddFilterButton'\nimport {DebugDocumentTypesNarrowed} from './debug/_DebugDocumentTypesNarrowed'\nimport {DebugFilterQuery} from './debug/_DebugFilterQuery'\nimport {DocumentTypesButton} from './documentTypes/DocumentTypesButton'\nimport {FilterButton} from './filter/FilterButton'\n\n/**\n * @internal\n */\nexport function Filters({showTypeFilter = true}: {showTypeFilter?: boolean}) {\n const {\n dispatch,\n state: {\n filters,\n fullscreen,\n lastAddedFilter,\n terms: {types},\n },\n } = useSearchState()\n const {t} = useTranslation()\n\n const [isMounted, setIsMounted] = useState(false)\n\n const handleClear = useCallback(() => {\n if (showTypeFilter) dispatch({type: 'TERMS_TYPES_CLEAR'})\n dispatch({type: 'TERMS_FILTERS_CLEAR'})\n }, [dispatch, showTypeFilter])\n\n const clearFiltersButtonVisible = filters.length > 0 || (showTypeFilter && types.length > 0)\n\n useEffect(() => {\n // oxlint-disable-next-line react/react-compiler\n setIsMounted(true)\n }, [])\n\n const lastAddedFilterKey = lastAddedFilter && getFilterKey(lastAddedFilter)\n\n const clearFiltersButton = (\n <Button\n mode=\"bleed\"\n onClick={handleClear}\n size={fullscreen ? 'large' : 'default'}\n text={t('search.action.clear-filters')}\n tone=\"critical\"\n />\n )\n\n return (\n <>\n <Flex align=\"flex-start\" gap={3} justify=\"space-between\" padding={2}>\n <Flex flex={1} gap={2} wrap=\"wrap\">\n {showTypeFilter && <DocumentTypesButton />}\n {filters?.map((filter) => {\n const key = getFilterKey(filter)\n return (\n <FilterButton\n key={key}\n filter={filter}\n initialOpen={isMounted && lastAddedFilterKey === key}\n />\n )\n })}\n {!fullscreen && <AddFilterButton />}\n </Flex>\n {clearFiltersButtonVisible && !fullscreen && clearFiltersButton}\n </Flex>\n\n {fullscreen && (\n <Flex justify=\"space-between\" paddingBottom={2} paddingX={2}>\n <AddFilterButton />\n {clearFiltersButtonVisible && clearFiltersButton}\n </Flex>\n )}\n\n {/* Debug panels */}\n {DEBUG_MODE && (\n <>\n <DebugFilterQuery />\n <DebugDocumentTypesNarrowed />\n </>\n )}\n </>\n )\n}\n","import {ArrowLeftIcon} from '@sanity/icons/ArrowLeft'\nimport {ControlsIcon} from '@sanity/icons/Controls'\nimport {SearchIcon} from '@sanity/icons/Search'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\nimport {Box, Card, Flex} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useEffect, useRef, type RefAttributes} from 'react'\nimport {keyframes, styled} from 'styled-components'\n\nimport {Button} from '../../../../../../ui-components/button/Button'\nimport {StatusButton} from '../../../../../components/StatusButton'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {CustomTextInput} from './common/CustomTextInput'\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst AnimatedSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nconst FilterDiv = styled.div`\n line-height: 0;\n position: relative;\n`\n\ninterface SearchHeaderProps {\n ariaInputLabel?: string\n onClose?: () => void\n}\n\n/**\n * @internal\n */\nexport function SearchHeader({\n ref,\n ariaInputLabel,\n onClose,\n}: SearchHeaderProps & RefAttributes<HTMLInputElement>) {\n const isMountedRef = useRef(false)\n\n const {t} = useTranslation()\n const {\n dispatch,\n state: {\n filters,\n filtersVisible,\n fullscreen,\n result: {loading},\n terms,\n },\n } = useSearchState()\n const {types, query} = terms\n\n const hasValidTerms = hasSearchableTerms({terms})\n const ariaLabel =\n ariaInputLabel || hasValidTerms\n ? t('search.search-results-aria-label')\n : t('search.recent-searches-aria-label')\n\n const handleFiltersToggle = useCallback(\n () => dispatch({type: 'FILTERS_VISIBLE_SET', visible: !filtersVisible}),\n [dispatch, filtersVisible],\n )\n const handleQueryChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) =>\n dispatch({type: 'TERMS_QUERY_SET', query: e.currentTarget.value}),\n [dispatch],\n )\n const handleQueryClear = useCallback(() => {\n dispatch({type: 'TERMS_QUERY_SET', query: ''})\n }, [dispatch])\n\n /**\n * Always show filters on non-fullscreen mode\n */\n useEffect(() => {\n if (!fullscreen) {\n dispatch({type: 'FILTERS_VISIBLE_SET', visible: true})\n }\n }, [dispatch, fullscreen])\n\n useEffect(() => {\n isMountedRef.current = true\n }, [])\n\n const notificationBadgeVisible = filters.length > 0 || types.length > 0\n\n return (\n <Card flex=\"none\">\n <Flex align=\"center\" flex={1} gap={fullscreen ? 2 : 1} padding={fullscreen ? 2 : 1}>\n {/* (Fullscreen) Close button */}\n {fullscreen && (\n <Button\n aria-label={t('search.action.close-search-aria-label')}\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n onClick={onClose}\n size=\"large\"\n tooltipProps={{content: t('search.action.close-search-aria-label')}}\n />\n )}\n\n {/* Search field */}\n <Box flex={1}>\n <CustomTextInput\n __unstable_disableFocusRing\n $background={fullscreen}\n $smallClearButton={fullscreen}\n aria-label={ariaLabel}\n autoComplete=\"off\"\n border={false}\n clearButton={!!query}\n fontSize={[2, 2, 1]}\n icon={loading ? AnimatedSpinnerIcon : SearchIcon}\n onChange={handleQueryChange}\n onClear={handleQueryClear}\n placeholder={t('search.placeholder')}\n radius={2}\n ref={ref}\n spellCheck={false}\n value={query}\n />\n </Box>\n\n {/* Filter toggle */}\n {fullscreen && (\n <FilterDiv>\n <StatusButton\n aria-expanded={filtersVisible}\n aria-label={t('search.action.toggle-filters-aria-label', {\n context: filtersVisible ? 'hide' : 'show',\n })}\n icon={ControlsIcon}\n mode=\"bleed\"\n onClick={handleFiltersToggle}\n selected={filtersVisible}\n size=\"large\"\n tone={notificationBadgeVisible ? 'primary' : undefined}\n tooltipProps={{\n content: t('search.action.toggle-filters-label', {\n context: filtersVisible ? 'hide' : 'show',\n }),\n }}\n />\n </FilterDiv>\n )}\n </Flex>\n </Card>\n )\n}\n","import {useGlobalKeyDown, useLayer} from '@sanity/ui'\nimport {isHotkey} from 'is-hotkey-esm'\nimport {useCallback} from 'react'\n\nimport {GLOBAL_SEARCH_KEY} from '../constants'\n\nconst isSearchHotKey = isHotkey(`mod+${GLOBAL_SEARCH_KEY}`)\nconst isEscape = isHotkey('escape')\n\n/**\n * This hook binds a global shortcut combination, as well as the ESC key, to open / close callbacks.\n *\n * It will prevent the ESC key from firing `onClose` callbacks if it's not the top most layer\n * (i.e. if a nested dialog is mounted).\n */\nexport function useSearchHotkeys({\n open,\n onClose,\n onOpen,\n}: {\n open: boolean\n onClose?: () => void\n onOpen?: () => void\n}): void {\n const {isTopLayer} = useLayer()\n\n const handleClose = useCallback(() => {\n onClose?.()\n }, [onClose])\n\n const handleGlobalKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (isSearchHotKey(event)) {\n event.preventDefault()\n if (open) {\n handleClose()\n } else {\n onOpen?.()\n }\n }\n if (isEscape(event) && open && isTopLayer) {\n handleClose()\n }\n },\n [handleClose, isTopLayer, open, onOpen],\n )\n\n useGlobalKeyDown(handleGlobalKeyDown)\n}\n","import {type ReactNode, useCallback, useEffect, useRef} from 'react'\n\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {useSearchHotkeys} from '../../hooks/useSearchHotkeys'\n\ninterface SearchWrapperProps {\n children: ReactNode\n hasValidTerms: boolean\n onClose: () => void\n onOpen?: () => void\n open: boolean\n}\n\nexport function SearchWrapper({\n children,\n hasValidTerms,\n onClose,\n onOpen,\n open,\n}: SearchWrapperProps) {\n const isMountedRef = useRef(false)\n\n const {\n dispatch,\n searchCommandList,\n setOnClose,\n state: {result},\n } = useSearchState()\n\n /**\n * Store top-most search result scroll index on close\n */\n const handleClose = useCallback(() => {\n dispatch({index: searchCommandList?.getTopIndex() ?? -1, type: 'LAST_ACTIVE_INDEX_SET'})\n onClose()\n }, [dispatch, onClose, searchCommandList])\n\n /**\n * Bind hotkeys to open action\n */\n useSearchHotkeys({onClose: handleClose, onOpen, open})\n\n /**\n * Set shared `onClose` in search context\n */\n useEffect(() => {\n /**\n * When using useState you have to use the function callback version of setState,\n * otherwise it'll call your function and set the state to whatever your function return.\n */\n setOnClose(() => handleClose)\n }, [handleClose, setOnClose])\n\n /**\n * Reset last search index when new results are loaded, or visiting recent searches\n */\n // @todo Revise if/when we introduce pagination\n useEffect(() => {\n if ((!hasValidTerms || result.loaded) && isMountedRef.current) {\n dispatch({index: 0, type: 'LAST_ACTIVE_INDEX_SET'})\n }\n }, [dispatch, hasValidTerms, result.loaded])\n\n /**\n * Reset ordering when is closed (without valid search terms)\n */\n useEffect(() => {\n if (!hasValidTerms && isMountedRef.current && !open) {\n dispatch({type: 'ORDERING_RESET'})\n }\n }, [dispatch, hasValidTerms, open])\n\n /**\n * Store mounted state\n */\n useEffect(() => {\n if (!isMountedRef?.current) {\n isMountedRef.current = true\n }\n }, [])\n\n return children\n}\n","import {\n type ArrayDefinition,\n type ObjectDefinition,\n type Schema,\n type SchemaTypeDefinition,\n type StringDefinition,\n} from '@sanity/types'\nimport startCase from 'lodash-es/startCase.js'\n\nimport {sanitizeFieldValue} from '../utils/sanitizeField'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {getSupportedFieldTypes, type SearchFilterDefinition} from './filters'\n\nexport const MAX_OBJECT_TRAVERSAL_DEPTH = 3\n\n/**\n * @internal\n */\nexport interface SearchFieldDefinition {\n documentTypes: string[]\n fieldPath: string\n filterName: string\n id: string\n name: string\n title: string\n titlePath: string[]\n type: string\n}\n\n/**\n * @internal\n */\nexport type SearchFieldDefinitionDictionary = Record<\n SearchFieldDefinition['id'],\n SearchFieldDefinition\n>\n\nexport function createFieldDefinitions(\n schema: Schema,\n filterDefinitions: SearchFilterDefinition[],\n): SearchFieldDefinition[] {\n // Get allowed document types (`__experimental_omnisearch_visibility !== false`)\n const searchableDocumentTypeNames = getSearchableOmnisearchTypes(schema).map((s) => s.name)\n\n // Get user-defined schema types, partitioned into documents and objects\n const {documentTypes, objectTypes} = (schema._original?.types || [])\n .filter((t) => {\n // Ignore document types hidden by omnisearch\n const isNotTypeNotIgnored = isDocumentObjectDefinition(t)\n ? searchableDocumentTypeNames.includes(t.name)\n : true\n\n return (\n isNotTypeNotIgnored &&\n // Ignore the 'slug' object to prevent surfacing 'current' and (deprecated) 'source field' fields.\n t.name !== 'slug' &&\n // Ignore sanity documents and assets\n !t.name.startsWith('sanity.')\n )\n })\n // Partition\n .reduce<{\n documentTypes: Record<string, ObjectDefinition>\n objectTypes: Record<string, ObjectDefinition>\n }>(\n (acc, schemaType) => {\n if (isDocumentObjectDefinition(schemaType)) {\n acc.documentTypes[schemaType.name] = schemaType\n }\n if (isObjectDefinition(schemaType)) {\n acc.objectTypes[schemaType.name] = schemaType\n }\n return acc\n },\n {documentTypes: {}, objectTypes: {}},\n ) || {documentTypes: {}, objectTypes: {}}\n\n // Get supported filter field types that have corresponding filters defined\n const supportedFieldTypes = getSupportedFieldTypes(filterDefinitions)\n\n return getDocumentFieldDefinitions(supportedFieldTypes, documentTypes, objectTypes)\n}\n\nexport function createFieldDefinitionDictionary(\n fieldDefinitions: SearchFieldDefinition[],\n): SearchFieldDefinitionDictionary {\n return fieldDefinitions.reduce<SearchFieldDefinitionDictionary>((acc, val) => {\n acc[val.id] = val\n return acc\n }, {})\n}\n\nexport function generateFieldId(field: SearchFieldDefinition): string {\n return [field.type, field.fieldPath, field.title].join('-')\n}\n\nfunction getDocumentFieldDefinitions(\n supportedFieldTypes: string[],\n documentTypes: Record<string, ObjectDefinition>,\n objectTypes: Record<string, ObjectDefinition>,\n) {\n const supportedFieldTypeSet = new Set<string>(supportedFieldTypes)\n\n // Recursively iterate through all documents and resolve objects\n function addFieldDefinitionRecursive({\n acc,\n defType,\n depth = 0,\n documentType,\n prevFieldPath,\n prevTitlePath,\n }: {\n acc: SearchFieldDefinition[]\n defType: SchemaTypeDefinition\n depth?: number\n documentType: string\n prevFieldPath?: string\n prevTitlePath?: string[]\n }) {\n if (depth > MAX_OBJECT_TRAVERSAL_DEPTH) {\n return\n }\n\n const isInternalField = defType.name.startsWith('_')\n // Sanitize schema titles (which may either be a string or React element)\n const title = defType?.title ? sanitizeFieldValue(defType.title) : startCase(defType.name)\n const fieldPath = prevFieldPath ? `${prevFieldPath}.${defType.name}` : defType.name\n const titlePath = prevTitlePath ? [...prevTitlePath, title] : [title]\n\n // Map to an existing document, object or inline object if found\n const existingObject = objectTypes[defType.type]\n const existingDocument = documentTypes[defType.type]\n const inlineObject = isObjectDefinition(defType) ? defType : null\n const targetObject = existingDocument || existingObject || inlineObject\n\n if (targetObject) {\n for (const field of targetObject.fields ?? []) {\n addFieldDefinitionRecursive({\n acc,\n defType: field as ObjectDefinition,\n depth: depth + 1,\n documentType,\n prevFieldPath: fieldPath,\n prevTitlePath: titlePath,\n })\n }\n return\n }\n\n // Return if the current field type doesn't have a corresponding filter\n if (!supportedFieldTypeSet.has(defType.type)) return\n\n acc.push({\n documentTypes: documentType && !isInternalField ? [documentType] : [],\n fieldPath,\n filterName: resolveFilterName(defType),\n id: '',\n name: defType.name,\n titlePath,\n title,\n type: defType.type,\n })\n }\n\n const fieldDefinitions: Array<SearchFieldDefinition> = []\n\n for (const documentType of Object.values(documentTypes)) {\n const documentFields: Array<SearchFieldDefinition> = []\n\n for (const documentField of (documentType.fields ?? []) as Array<ObjectDefinition>) {\n addFieldDefinitionRecursive({\n acc: documentFields,\n defType: documentField,\n documentType: documentType.name,\n })\n }\n\n fieldDefinitions.push(...documentFields.map(addFieldDefinitionId))\n }\n\n const consolidatedFieldDefinitionMap = new Map<string, SearchFieldDefinition>()\n for (const fieldDefinitionWithId of fieldDefinitions) {\n const consolidated = consolidatedFieldDefinitionMap.get(fieldDefinitionWithId.id)\n\n if (consolidated) {\n consolidated.documentTypes.push(...fieldDefinitionWithId.documentTypes)\n continue\n }\n\n consolidatedFieldDefinitionMap.set(fieldDefinitionWithId.id, fieldDefinitionWithId)\n }\n\n const consolidatedFieldDefinitions = Array.from(consolidatedFieldDefinitionMap.values())\n consolidatedFieldDefinitions.sort(sortFieldDefinitions)\n\n return consolidatedFieldDefinitions\n}\n\n/**\n * Create unique ID as a hash from documentTypes, full field path, filter and field types\n */\nfunction addFieldDefinitionId(field: SearchFieldDefinition) {\n return {\n ...field,\n id: generateFieldId(field),\n }\n}\n\nfunction isArrayOfPrimitives(schemaType: SchemaTypeDefinition): schemaType is ArrayDefinition {\n if (isArrayDefinition(schemaType)) {\n return (\n schemaType.of.every((item) => ['boolean', 'number', 'string'].includes(item.type)) &&\n (schemaType.options?.list ? schemaType.options.list.length > 0 : false)\n )\n }\n return false\n}\n\nfunction isArrayDefinition(schemaType: SchemaTypeDefinition): schemaType is ArrayDefinition {\n return schemaType.type === 'array'\n}\n\nfunction isDocumentObjectDefinition(\n schemaType: SchemaTypeDefinition,\n): schemaType is ObjectDefinition {\n return schemaType.type === 'document'\n}\n\nfunction isObjectDefinition(schemaType: SchemaTypeDefinition): schemaType is ObjectDefinition {\n return schemaType.type === 'object'\n}\n\nfunction isStringDefinition(schemaType: SchemaTypeDefinition): schemaType is StringDefinition {\n return schemaType.type === 'string'\n}\n\nfunction isStringListDefinition(schemaType: SchemaTypeDefinition): schemaType is StringDefinition {\n if (isStringDefinition(schemaType)) {\n return schemaType.options?.list ? schemaType.options.list.length > 0 : false\n }\n return false\n}\n\nfunction resolveFilterName(schemaType: SchemaTypeDefinition) {\n if (isStringListDefinition(schemaType)) {\n return 'stringList'\n }\n if (isArrayDefinition(schemaType)) {\n if (schemaType.of.some((item) => item.type === 'reference')) {\n return 'arrayReferences'\n }\n if (schemaType.of.find((item) => item.type === 'block')) {\n return 'portableText'\n }\n if (isArrayOfPrimitives(schemaType)) {\n return 'arrayList'\n }\n }\n return schemaType.type\n}\n\n/**\n * Sort definitions by title, joined titlePath and fieldPath (in that order)\n */\nfunction sortFieldDefinitions(a: SearchFieldDefinition, b: SearchFieldDefinition): number {\n return (\n a.title.localeCompare(b.title) ||\n a.titlePath.slice(0, -1).join('/').localeCompare(b.titlePath.slice(0, -1).join('/')) ||\n a.fieldPath.localeCompare(b.fieldPath)\n )\n}\n","import {useCallback, useMemo} from 'react'\nimport {useSyncObservable} from 'react-rx'\nimport {merge, Subject} from 'rxjs'\nimport {map, startWith, tap} from 'rxjs/operators'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {useKeyValueStore} from '../../../../../store/datastores'\nimport {DEFAULT_STUDIO_CLIENT_OPTIONS} from '../../../../../studioClient'\n\nexport const RECENT_SEARCH_VERSION = 3\nconst STORED_SEARCHES_NAMESPACE = 'studio.search.recent'\n\nexport interface StoredSearch {\n version: number\n recentSearches: any[]\n}\n\nconst defaultValue: StoredSearch = {\n version: RECENT_SEARCH_VERSION,\n recentSearches: [],\n}\n\nexport function useStoredSearch(): [StoredSearch, (_value: StoredSearch) => void] {\n const keyValueStore = useKeyValueStore()\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const {dataset} = client.config()\n\n const keyValueStoreKey = useMemo(() => `${STORED_SEARCHES_NAMESPACE}.${dataset}`, [dataset])\n\n // Local echo of writes: the store's change events are not delivered to\n // subscribers while getKey's initial fetch is in flight, so without this\n // the UI would wait for the server round-trip (or miss the write entirely)\n // instead of updating immediately.\n const optimisticWrites$ = useMemo(() => new Subject<StoredSearch>(), [])\n\n const value$ = useMemo(\n () =>\n merge(\n keyValueStore.getKey(keyValueStoreKey).pipe(\n // Reset outdated stored versions (per original verifySearchVersionNumber\n // logic) — side effect kept in `tap` so the `map` below stays pure.\n tap((raw) => {\n const data = raw as StoredSearch | null\n if (data && data.version !== RECENT_SEARCH_VERSION) {\n void keyValueStore.setKey(keyValueStoreKey, defaultValue as any)\n }\n }),\n map((raw): StoredSearch => {\n const data = raw as StoredSearch | null\n // Fall back to the default when nothing is stored or the stored\n // version is outdated\n if (!data || data.version !== RECENT_SEARCH_VERSION) {\n return defaultValue\n }\n return data\n }),\n ),\n optimisticWrites$,\n ).pipe(startWith(defaultValue)),\n [keyValueStore, keyValueStoreKey, optimisticWrites$],\n )\n\n // Kept synchronous: callers (recentSearches) rebuild the stored list from\n // this value before writing it back, so a stale deferred snapshot could\n // clobber a concurrent write and drop a recent search.\n const value = useSyncObservable(value$, defaultValue)\n\n const set = useCallback(\n (newValue: StoredSearch) => {\n optimisticWrites$.next(newValue)\n void keyValueStore.setKey(keyValueStoreKey, newValue as any)\n },\n [keyValueStore, keyValueStoreKey, optimisticWrites$],\n )\n\n return useMemo(() => [value, set], [set, value])\n}\n","import {type ObjectSchemaType, type Schema} from '@sanity/types'\nimport isEqual from 'lodash-es/isEqual.js'\nimport omit from 'lodash-es/omit.js'\nimport {useMemo} from 'react'\n\nimport {useSchema} from '../../../../../hooks/useSchema'\nimport {type SearchTerms} from '../../../../../search/common/types'\nimport {useSource} from '../../../../source'\nimport {\n createFieldDefinitionDictionary,\n createFieldDefinitions,\n type SearchFieldDefinitionDictionary,\n} from '../definitions/fields'\nimport {\n createFilterDefinitionDictionary,\n type SearchFilterDefinitionDictionary,\n} from '../definitions/filters'\nimport {\n createOperatorDefinitionDictionary,\n type SearchOperatorDefinitionDictionary,\n} from '../definitions/operators'\nimport {type SearchFilter} from '../types'\nimport {validateFilter} from '../utils/filterUtils'\nimport {getSearchableOmnisearchTypes} from '../utils/selectors'\nimport {useStoredSearch} from './useStoredSearch'\n\nexport const MAX_RECENT_SEARCHES = 5\n/**\n * Current recent search version.\n *\n * Users with recent searches containing mismatching versions will have their recent searches cleared.\n * This value should only be incremented when search filter operator `value` data types are updated,\n * ensuring that users don't have stored recent searches containing invalid operator values.\n *\n * This is a bit of a blunt instrument: in future we could look to validate individual filter values and\n * remove outdated entries individually.\n */\nconst RECENT_SEARCH_VERSION = 3\n\nexport type RecentSearch = SearchTerms & {\n __recent: {\n index: number\n timestamp: number\n }\n filters?: SearchFilter[]\n}\n\nexport interface RecentSearchesStore {\n addSearch: (searchTerm: SearchTerms, filters?: SearchFilter[]) => RecentSearch[]\n getRecentSearches: () => RecentSearch[]\n removeSearch: () => RecentSearch[]\n removeSearchAtIndex: (index: number) => RecentSearch[]\n}\n\ninterface StoredSearch {\n version: number\n recentSearches: StoredSearchItem[]\n}\n\ninterface StoredSearchItem {\n created: string\n filters: SearchFilter[]\n terms: Omit<SearchTerms, 'types'> & {typeNames: string[]}\n}\n\nexport function useRecentSearchesStore(): RecentSearchesStore {\n const [storedSearch, setStoredSearch] = useStoredSearch()\n const schema = useSchema()\n const {\n search: {operators, filters},\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n } = useSource()\n\n // Create field, filter and operator dictionaries\n const {fieldDefinitions, filterDefinitions, operatorDefinitions} = useMemo(() => {\n return {\n fieldDefinitions: createFieldDefinitionDictionary(createFieldDefinitions(schema, filters)),\n filterDefinitions: createFilterDefinitionDictionary(filters),\n operatorDefinitions: createOperatorDefinitionDictionary(operators),\n }\n }, [filters, operators, schema])\n\n return {\n /**\n * Write a search term to Local Storage and return updated recent searches.\n */\n addSearch: (searchTerm: SearchTerms, searchFilters?: SearchFilter[]): RecentSearch[] => {\n const storedFilters = (searchFilters || []).map((filter): SearchFilter => ({\n fieldId: filter.fieldId,\n filterName: filter.filterName,\n operatorType: filter.operatorType,\n value: filter.value,\n }))\n\n // Remove any filters in 'incomplete' states prior to writing to local storage.\n const validStoredFilters = storedFilters.filter((filter) =>\n validateFilter({\n fieldDefinitions,\n filter,\n filterDefinitions,\n operatorDefinitions,\n }),\n )\n\n const newSearchItem: StoredSearchItem = {\n created: new Date().toISOString(),\n filters: validStoredFilters,\n terms: {\n query: searchTerm.query.trim(),\n typeNames: searchTerm.types.map((s) => s.name),\n },\n }\n // Add new search item, remove previous duplicates (if any) and truncate array.\n // When comparing search items, don't compare against the created date (which will always be different).\n const newRecent: StoredSearch = {\n version: RECENT_SEARCH_VERSION,\n recentSearches: [\n newSearchItem,\n ...storedSearch.recentSearches.filter((r) => {\n return !isEqual(omit(r, 'created'), omit(newSearchItem, 'created'))\n }),\n ].slice(0, MAX_RECENT_SEARCHES),\n }\n setStoredSearch(newRecent)\n\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch: newRecent,\n setStoredSearch,\n })\n },\n /**\n * Fetch all recent searches from Local Storage.\n * Invalid search terms will be filtered out and terms will be re-written to Local Storage.\n */\n getRecentSearches: () =>\n getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch,\n setStoredSearch,\n }),\n /**\n * Remove all search terms from Local Storage and return updated recent searches.\n */\n removeSearch: () => {\n const newRecent: StoredSearch = {\n ...storedSearch,\n recentSearches: [],\n }\n\n setStoredSearch(newRecent)\n\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch: newRecent,\n setStoredSearch,\n })\n },\n /**\n * Remove a search term from Local Storage and return updated recent searches.\n */\n removeSearchAtIndex: (index: number) => {\n if (index < 0 || index > storedSearch.recentSearches.length) {\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch,\n setStoredSearch,\n })\n }\n\n const newRecent: StoredSearch = {\n ...storedSearch,\n recentSearches: [\n ...storedSearch.recentSearches.slice(0, index),\n ...storedSearch.recentSearches.slice(index + 1),\n ],\n }\n\n setStoredSearch(newRecent)\n\n return getRecentSearchTerms({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n schema,\n storedSearch: newRecent,\n setStoredSearch,\n })\n },\n }\n}\n\n/**\n * Get a list of recent searches from Local Storage.\n * Recent searches contain full document schema types.\n */\nfunction getRecentSearchTerms({\n schema,\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n storedSearch,\n setStoredSearch,\n}: {\n schema: Schema\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n operatorDefinitions: SearchOperatorDefinitionDictionary\n storedSearch: StoredSearch\n setStoredSearch: (_value: StoredSearch) => void\n}): RecentSearch[] {\n return sanitizeStoredSearch({\n studioSchema: schema,\n filterDefinitions,\n fieldDefinitions,\n operatorDefinitions,\n storedSearch,\n setStoredSearch,\n })\n .recentSearches.filter((r) => !!r.terms)\n .map((r, index) => ({\n __recent: {\n index,\n timestamp: new Date(r.created).getTime(),\n },\n filters: r.filters,\n query: r.terms.query,\n types: r.terms.typeNames\n .map((typeName) => schema.get(typeName))\n .filter((s): s is ObjectSchemaType => !!(s && s.jsonType === 'object')),\n }))\n}\n\n/**\n * Sanitize stored search.\n *\n * Ignore searches containing:\n * - Any number of invalid document schema types\n * - Document types hidden from omnisearch with __experimental_omnisearch_visibility\n * - Invalid filters\n *\n * This mutates Local Storage if any invalid terms are found.\n */\nfunction sanitizeStoredSearch({\n fieldDefinitions,\n filterDefinitions,\n operatorDefinitions,\n studioSchema,\n storedSearch,\n setStoredSearch,\n}: {\n fieldDefinitions: SearchFieldDefinitionDictionary\n filterDefinitions: SearchFilterDefinitionDictionary\n operatorDefinitions: SearchOperatorDefinitionDictionary\n studioSchema: Schema\n storedSearch: StoredSearch\n setStoredSearch: (_value: StoredSearch) => void\n}): StoredSearch {\n // Obtain all 'searchable' type names – defined as a type that exists in\n // the current schema and also visible to omnisearch.\n const searchableTypeNames = getSearchableOmnisearchTypes(studioSchema).map(\n (schema) => schema.name,\n )\n\n const filteredSearch = storedSearch.recentSearches.filter((recentSearch) => {\n return (\n // Has valid searchable types (not hidden by omnisearch)\n recentSearch.terms.typeNames.every((typeName) => searchableTypeNames.includes(typeName)) &&\n recentSearch.filters.every((filter) =>\n validateFilter({fieldDefinitions, filter, filterDefinitions, operatorDefinitions}),\n )\n )\n })\n\n const newStoredSearch: StoredSearch = {\n version: RECENT_SEARCH_VERSION,\n recentSearches: filteredSearch,\n }\n\n if (newStoredSearch.recentSearches.length < storedSearch.recentSearches.length) {\n setStoredSearch(newStoredSearch)\n }\n\n return newStoredSearch\n}\n","import {ControlsIcon} from '@sanity/icons/Controls'\nimport {Flex, Inline, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {Translate} from '../../../../../i18n/Translate'\n\nexport function Instructions() {\n const {t} = useTranslation()\n\n return (\n <Flex align=\"center\" direction=\"column\" gap={4} paddingX={4} paddingY={5}>\n <Inline gap={3}>\n <Text muted>\n <Translate\n t={t}\n i18nKey=\"search.instructions\"\n components={{\n ControlsIcon: () => <ControlsIcon key={0} style={{padding: '0 0.25rem'}} />,\n }}\n />\n </Text>\n </Inline>\n </Flex>\n )\n}\n","import {defineEvent} from '@sanity/telemetry'\n\nexport const RecentSearchClicked = defineEvent({\n name: 'Recent Search Viewed',\n version: 1,\n description: 'User clicked on a recent search item to reapply it',\n})\n\n/**\n * Time from a global navbar search being dispatched (post-debounce) to\n * its results arriving or failing.\n *\n * Timing origin (T0) is the `onStart` callback of the search pipeline,\n * which fires after the 300ms debounce (we want network latency, not\n * the user's typing pause). Timing end (T1) is the `onComplete` or\n * `onError` callback in the same pipeline.\n *\n * Fires only for searches with searchable terms; empty-term \"searches\"\n * (where the pipeline short-circuits to an empty observable) are\n * skipped to avoid noising the metric.\n *\n * Not overlapping with `Document List Load Time Measured`, which\n * measures search within the structure tool's document list. This\n * event covers the global omnisearch only.\n *\n * Sampled at most every 30 seconds to bound the event volume when\n * users type quickly (matches existing `Document Pair Load Time Measured`\n * and `Document List Load Time Measured`).\n */\nexport interface GlobalSearchLatencyMeasuredData {\n /** ms from onStart to onComplete/onError */\n durationMs: number\n queryLength: number\n typeFilterCount: number\n /** number of hits returned (0 when errored) */\n resultCount: number\n /** search strategy from workspace config (e.g. 'text-search', 'groq2024') */\n strategy: string | null\n /** true when the pipeline called onError instead of onComplete */\n errored: boolean\n}\n\nexport const GlobalSearchLatencyMeasured = defineEvent<GlobalSearchLatencyMeasuredData>({\n name: 'Global Search Latency Measured',\n version: 1,\n description:\n 'Time from a global navbar search being dispatched (post-debounce) to ' +\n 'its results arriving or failing.',\n maxSampleRate: 30_000,\n})\n","import {type SchemaType} from '@sanity/types'\nimport {Card, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {documentTypesTruncated} from '../../utils/documentTypesTruncated'\n\ninterface TypePillsProps {\n availableCharacters?: number\n types: SchemaType[]\n}\n\nexport function DocumentTypesPill({availableCharacters, types}: TypePillsProps) {\n const {t} = useTranslation()\n const title = useMemo(\n () => documentTypesTruncated({availableCharacters, types, t}),\n [availableCharacters, types, t],\n )\n\n return (\n <Card border padding={2} radius={2}>\n <Text muted size={1}>\n {title}\n </Text>\n </Card>\n )\n}\n","import {Card} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type SearchFilter} from '../../types'\nimport {FilterLabel} from './FilterLabel'\n\ninterface FilterPillProps {\n filter: SearchFilter\n}\n\nconst FilterPillCard = styled(Card)`\n cursor: default;\n`\n\nexport function FilterPill({filter}: FilterPillProps) {\n return (\n <FilterPillCard border padding={2} radius={2} tone=\"primary\">\n <FilterLabel filter={filter} />\n </FilterPillCard>\n )\n}\n","import {ClockIcon} from '@sanity/icons/Clock'\nimport {CloseIcon} from '@sanity/icons/Close'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {\n Box,\n // oxlint-disable-next-line no-restricted-imports\n Button, // Button with specific styling and children behavior.\n Flex,\n Inline,\n rem,\n type ResponsiveMarginProps,\n type ResponsivePaddingProps,\n Text,\n} from '@sanity/ui'\nimport {type MouseEvent, useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {RecentSearchClicked} from '../../../__telemetry__/search.telemetry'\nimport {useSearchState} from '../../../contexts/search/useSearchState'\nimport {type RecentSearch, useRecentSearchesStore} from '../../../datastores/recentSearches'\nimport {DocumentTypesPill} from '../../common/DocumentTypesPill'\nimport {FilterPill} from '../../common/FilterPill'\n\nexport interface RecentSearchesProps extends ResponsiveMarginProps, ResponsivePaddingProps {\n index: number\n maxVisibleTypePillChars?: number\n value: RecentSearch\n}\n\nconst DEFAULT_COMBINED_TYPE_COUNT = 40\n\nconst RecentSearchItemButton = styled(Button)`\n border-radius: ${({theme}) => rem(theme.sanity.radius[2]) /* oxlint-disable-line no-deprecated -- will fix in follow up PR */};\n cursor: default;\n width: 100%;\n`\n\nconst SearchItemPillsBox = styled(Box)`\n flex-shrink: 3;\n`\n\nconst SearchItemQueryFlex = styled(Flex)`\n flex-shrink: 2;\n`\n\nconst CloseButtonDiv = styled.div`\n opacity: 0.8;\n visibility: hidden;\n\n @media (hover: hover) {\n ${RecentSearchItemButton}:hover & {\n visibility: visible;\n }\n &:hover {\n opacity: 0.4;\n }\n }\n`\n\nexport function RecentSearchItem({\n index,\n maxVisibleTypePillChars = DEFAULT_COMBINED_TYPE_COUNT,\n value,\n ...rest\n}: RecentSearchesProps) {\n const {dispatch} = useSearchState()\n const recentSearchesStore = useRecentSearchesStore()\n const telemetry = useTelemetry()\n\n // Determine how many characters are left to render type pills\n const availableCharacters = maxVisibleTypePillChars - value.query.length\n\n const handleClick = useCallback(() => {\n dispatch({type: 'TERMS_SET', filters: value?.filters, terms: value})\n\n // Add to Local Storage\n if (recentSearchesStore) {\n recentSearchesStore?.addSearch(value, value?.filters)\n }\n\n telemetry.log(RecentSearchClicked)\n }, [dispatch, recentSearchesStore, telemetry, value])\n\n const handleDelete = useCallback(\n (event: MouseEvent) => {\n event.stopPropagation()\n // Remove from Local Storage\n if (recentSearchesStore) {\n recentSearchesStore?.removeSearchAtIndex(index)\n }\n },\n [index, recentSearchesStore],\n )\n\n return (\n <Box {...rest}>\n <RecentSearchItemButton\n mode=\"bleed\"\n onClick={handleClick}\n paddingLeft={3}\n paddingRight={1}\n paddingY={1}\n tabIndex={-1}\n >\n <Flex align=\"stretch\">\n {/* Combination of <Inline> and a zero-width character to ensure icon is optically aligned with adjacent text */}\n <Inline paddingY={2}>\n <Text muted size={1}>\n <ClockIcon />\n </Text>\n <Text>&#8203;</Text>\n </Inline>\n <Flex align=\"stretch\" flex={1} gap={2} justify=\"flex-start\" marginLeft={3} wrap=\"wrap\">\n {/* Text query */}\n {value.query && (\n <SearchItemQueryFlex align=\"center\" paddingY={2}>\n <Text muted size={1} textOverflow=\"ellipsis\" weight=\"medium\">\n {value.query}\n </Text>\n </SearchItemQueryFlex>\n )}\n {/* Document type */}\n {value.types.length > 0 && (\n <SearchItemPillsBox>\n <DocumentTypesPill availableCharacters={availableCharacters} types={value.types} />\n </SearchItemPillsBox>\n )}\n {/* Filters */}\n {value?.filters?.map((filter, i) => {\n // oxlint-disable-next-line no-array-index-key\n return <FilterPill key={i} filter={filter} />\n })}\n </Flex>\n\n {/* TODO: this is neither semantic nor accessible, consider revising */}\n <Flex align=\"center\">\n <CloseButtonDiv onClick={handleDelete}>\n <Flex padding={2}>\n <Text size={1}>\n <CloseIcon />\n </Text>\n </Flex>\n </CloseButtonDiv>\n </Flex>\n </Flex>\n </RecentSearchItemButton>\n </Box>\n )\n}\n","import {Box, Card, Text, useMediaIndex} from '@sanity/ui'\nimport {useCallback, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../../ui-components/button/Button'\nimport {CommandList} from '../../../../../../components/commandList/CommandList'\nimport {\n type CommandListHandle,\n type CommandListRenderItemCallback,\n} from '../../../../../../components/commandList/types'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {type RecentSearch, useRecentSearchesStore} from '../../datastores/recentSearches'\nimport {Instructions} from '../Instructions'\nimport {RecentSearchItem} from './item/RecentSearchItem'\n\nconst VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT = 36 // px\n\n// Max character count of selected document types (combined) by breakpoint\nconst MAX_COMBINED_TYPE_COUNT_SMALL = 20\nconst MAX_COMBINED_TYPE_COUNT_LARGE = 40\n\nconst RecentSearchesBox = styled(Card)`\n overflow-x: hidden;\n overflow-y: auto;\n position: relative;\n`\n\ninterface RecentSearchesProps {\n inputElement?: HTMLInputElement | null\n}\n\nexport function RecentSearches({inputElement}: RecentSearchesProps) {\n const {\n dispatch,\n state: {filtersVisible, fullscreen},\n } = useSearchState()\n const recentSearchesStore = useRecentSearchesStore()\n const recentSearches = useMemo(\n () => recentSearchesStore?.getRecentSearches(),\n [recentSearchesStore],\n )\n\n const commandListRef = useRef<CommandListHandle | null>(null)\n\n const {t} = useTranslation()\n\n /**\n * Remove terms from local storage.\n * Also re-focus input (on non-touch devices)\n */\n const handleClearRecentSearchesClick = useCallback(() => {\n if (recentSearchesStore) {\n recentSearchesStore.removeSearch()\n }\n commandListRef?.current?.focusInputElement()\n }, [recentSearchesStore])\n\n const mediaIndex = useMediaIndex()\n\n const maxVisibleTypePillChars = useMemo(() => {\n return mediaIndex < 2 ? MAX_COMBINED_TYPE_COUNT_SMALL : MAX_COMBINED_TYPE_COUNT_LARGE\n }, [mediaIndex])\n\n const renderItem = useCallback<CommandListRenderItemCallback<RecentSearch>>(\n (item, {virtualIndex}) => {\n return (\n <RecentSearchItem\n index={virtualIndex}\n maxVisibleTypePillChars={maxVisibleTypePillChars}\n paddingBottom={1}\n value={item}\n />\n )\n },\n [maxVisibleTypePillChars],\n )\n\n const hasRecentSearches = !!recentSearches.length\n\n return (\n <RecentSearchesBox\n borderTop={hasRecentSearches || (!hasRecentSearches && !filtersVisible && fullscreen)}\n flex={1}\n >\n {recentSearches.length > 0 ? (\n <>\n <Box paddingBottom={2} paddingTop={4} paddingX={3}>\n <Text muted size={1} weight=\"medium\">\n {t('search.recent-searches-label')}\n </Text>\n </Box>\n <Box>\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.recent-searches-aria-label')}\n inputElement={inputElement}\n initialIndex={0}\n itemHeight={VIRTUAL_LIST_RECENT_SEARCH_ITEM_HEIGHT}\n items={recentSearches}\n paddingX={2}\n paddingY={1}\n renderItem={renderItem}\n />\n </Box>\n <Box paddingBottom={2} paddingTop={1} paddingX={2}>\n <Button\n mode=\"bleed\"\n onClick={handleClearRecentSearchesClick}\n tone=\"default\"\n text={t('search.action.clear-recent-searches')}\n muted\n />\n </Box>\n </>\n ) : (\n !filtersVisible && fullscreen && <Instructions />\n )}\n </RecentSearchesBox>\n )\n}\n","import {Container, Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\n\nexport function NoResults() {\n const {t} = useTranslation()\n\n return (\n <Container width={0}>\n <Stack aria-live=\"assertive\" gap={4} paddingX={4} paddingY={5}>\n <Text align=\"center\" muted size={1} weight=\"medium\">\n {t('search.no-results-title')}\n </Text>\n <Text align=\"center\" muted size={1}>\n {t('search.no-results-help-description')}\n </Text>\n </Stack>\n </Container>\n )\n}\n","import {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Flex} from '@sanity/ui'\n\nimport {TextWithTone} from '../../../../../components/textWithTone/TextWithTone'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\n\nexport function SearchError() {\n const {t} = useTranslation()\n\n return (\n <Flex\n align=\"center\"\n aria-live=\"assertive\"\n direction=\"column\"\n flex={1}\n gap={3}\n marginY={2}\n padding={4}\n >\n <Box marginBottom={1}>\n <TextWithTone tone=\"critical\">\n <WarningOutlineIcon />\n </TextWithTone>\n </Box>\n <TextWithTone size={2} tone=\"critical\" weight=\"medium\">\n {t('search.error.unspecified-error-title')}\n </TextWithTone>\n <TextWithTone size={1} tone=\"critical\">\n {t('search.error.unspecified-error-help-description')}\n </TextWithTone>\n </Flex>\n )\n}\n","import {type SearchStrategy} from '@sanity/types'\n\nimport {type SearchOrdering} from '../types'\n\nexport const getOrderings: (context: {\n searchStrategy?: SearchStrategy\n}) => Record<string, SearchOrdering> = ({searchStrategy}) => ({\n createdAsc: {\n ignoreScore: true,\n sort: {direction: 'asc', field: '_createdAt'},\n titleKey: 'search.ordering.created-ascending-label',\n },\n createdDesc: {\n ignoreScore: true,\n sort: {direction: 'desc', field: '_createdAt'},\n titleKey: 'search.ordering.created-descending-label',\n },\n relevance: {\n customMeasurementLabel: 'relevance',\n ...(searchStrategy === 'groqLegacy' ? {sort: {direction: 'desc', field: '_updatedAt'}} : {}),\n titleKey: 'search.ordering.best-match-label',\n },\n updatedAsc: {\n ignoreScore: true,\n sort: {direction: 'asc', field: '_updatedAt'},\n titleKey: 'search.ordering.updated-ascending-label',\n },\n updatedDesc: {\n ignoreScore: true,\n sort: {direction: 'desc', field: '_updatedAt'},\n titleKey: 'search.ordering.updated-descending-label',\n },\n})\n","import {SortIcon} from '@sanity/icons/Sort'\nimport {Card, Flex} from '@sanity/ui'\nimport {Menu, MenuDivider} from '@sanity/ui/menu'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useId, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button} from '../../../../../../ui-components/button/Button'\nimport {MenuButton} from '../../../../../../ui-components/menuButton/MenuButton'\nimport {MenuItem} from '../../../../../../ui-components/menuItem/MenuItem'\nimport {useTranslation} from '../../../../../i18n/hooks/useTranslation'\nimport {useWorkspace} from '../../../../workspace'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {getOrderings} from '../definitions/getOrderings'\nimport {type SearchOrdering} from '../types'\n\ninterface SearchDivider {\n type: 'divider'\n}\n\nconst SortMenuContentFlex = styled(Flex)`\n box-sizing: border-box;\n`\n\nfunction isSearchDivider(item: SearchDivider | SearchOrdering): item is SearchDivider {\n return (item as SearchDivider).type === 'divider'\n}\n\nfunction CustomMenuItem({ordering}: {ordering: SearchOrdering}) {\n const {t} = useTranslation()\n const {\n dispatch,\n state: {ordering: currentOrdering},\n } = useSearchState()\n\n const handleClick = useCallback(() => {\n dispatch({ordering, type: 'ORDERING_SET'})\n }, [dispatch, ordering])\n\n const isSelected = useMemo(() => isEqual(currentOrdering, ordering), [currentOrdering, ordering])\n\n return (\n <MenuItem\n onClick={handleClick}\n pressed={isSelected}\n tone=\"default\"\n text={t(ordering.titleKey)}\n />\n )\n}\n\nexport function SortMenu() {\n const {t} = useTranslation()\n const {strategy: searchStrategy} = useWorkspace().search\n const {\n state: {ordering},\n } = useSearchState()\n\n const menuButtonId = useId()\n\n const menuOrderings: (SearchDivider | SearchOrdering)[] = useMemo(() => {\n const orderings = getOrderings({searchStrategy})\n return [\n orderings.relevance,\n {type: 'divider'},\n orderings.createdAsc,\n orderings.createdDesc,\n {type: 'divider'},\n orderings.updatedAsc,\n orderings.updatedDesc,\n ]\n }, [searchStrategy])\n\n const currentMenuItem = menuOrderings.find(\n (item): item is SearchOrdering => isEqual(ordering, item) && !isSearchDivider(item),\n )\n\n if (!currentMenuItem) {\n return null\n }\n\n return (\n <Card borderBottom>\n <SortMenuContentFlex align=\"center\" flex={1} padding={2}>\n <MenuButton\n button={<Button mode=\"bleed\" icon={SortIcon} text={t(currentMenuItem.titleKey)} />}\n id={menuButtonId || ''}\n menu={\n <Menu>\n {menuOrderings.map((item, index) => {\n if (isSearchDivider(item)) {\n // oxlint-disable-next-line no-array-index-key\n return <MenuDivider key={index} />\n }\n return (\n <CustomMenuItem\n // oxlint-disable-next-line no-array-index-key\n key={index}\n ordering={item}\n />\n )\n })}\n </Menu>\n }\n popover={{placement: 'bottom-start', portal: true, radius: 2}}\n />\n </SortMenuContentFlex>\n </Card>\n )\n}\n","/* oxlint-disable i18next/no-literal-string */\nimport {Card, type CardTone, Inline, Stack} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\nimport {styled} from 'styled-components'\n\nimport {Tooltip} from '../../../../../../../../ui-components/tooltip/Tooltip'\nimport {type WeightedHit} from '../../../../../../../search/common/types'\n\ninterface DebugScoreProps {\n data: WeightedHit\n}\n\nconst DebugScoreCard = styled(Card)`\n cursor: help;\n left: 0;\n position: absolute;\n top: 0;\n`\n\nexport function DebugOverlay({data}: DebugScoreProps) {\n const {score} = data\n\n let tone: CardTone = 'default'\n if (score <= 0.1) {\n tone = 'critical'\n } else if (score >= 0.5) {\n tone = 'primary'\n }\n\n const matchingStories = data.stories.filter((story) => story.score > 0)\n\n return (\n <>\n <Tooltip\n content={\n <Stack gap={2}>\n {matchingStories.length ? (\n <>\n {matchingStories.map((story) => (\n <Inline key={story.path} gap={3}>\n <Code size={0} weight=\"medium\">\n {story.path}\n </Code>\n <Code size={0}>{story.why}</Code>\n </Inline>\n ))}\n </>\n ) : (\n <Code size={0}>No matches</Code>\n )}\n </Stack>\n }\n placement=\"bottom-start\"\n portal\n >\n <DebugScoreCard padding={1} shadow={1} tone={tone}>\n <Code size={0}>score: {score}</Code>\n </DebugScoreCard>\n </Tooltip>\n </>\n )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {Card, Flex} from '@sanity/ui'\nimport {type MouseEvent, useCallback, useDeferredValue} from 'react'\nimport {styled} from 'styled-components'\n\nimport {CommandList} from '../../../../../../components/commandList/CommandList'\nimport {type CommandListRenderItemCallback} from '../../../../../../components/commandList/types'\nimport {useTranslation} from '../../../../../../i18n/hooks/useTranslation'\nimport {type WeightedHit} from '../../../../../../search/common/types'\nimport {useSearchState} from '../../contexts/search/useSearchState'\nimport {useRecentSearchesStore} from '../../datastores/recentSearches'\nimport {NoResults} from '../NoResults'\nimport {SearchError} from '../SearchError'\nimport {SortMenu} from '../SortMenu'\nimport {DebugOverlay} from './item/DebugOverlay'\nimport {type ItemSelectHandler, SearchResultItem} from './item/SearchResultItem'\n\nconst VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT = 57 // px\nconst VIRTUAL_LIST_OVERSCAN = 4\n\nconst SearchResultsInnerFlex = styled(Flex)<{$loadingFirstPage: boolean}>`\n opacity: ${({$loadingFirstPage}) => ($loadingFirstPage ? 0.5 : 1)};\n overflow-x: hidden;\n overflow-y: auto;\n position: relative;\n transition: 300ms opacity;\n width: 100%;\n`\n\ninterface SearchResultsProps {\n disableIntentLink?: boolean\n inputElement: HTMLInputElement | null\n onItemSelect?: ItemSelectHandler\n previewPerspective?: StackablePerspective[]\n /**\n * The variant the result previews are resolved in, as a bare variant id.\n */\n previewVariant?: string\n}\n\nexport function SearchResults({\n disableIntentLink,\n inputElement,\n onItemSelect,\n previewPerspective,\n previewVariant,\n}: SearchResultsProps) {\n const {\n dispatch,\n onClose,\n setSearchCommandList,\n state: {debug, filters, fullscreen, lastActiveIndex, result, terms, cursor},\n } = useSearchState()\n const {t} = useTranslation()\n const recentSearchesStore = useRecentSearchesStore()\n\n // deferral only pays off because CommandList is memo()'d, so the urgent render skips the heavy row subtree\n const deferredHits = useDeferredValue(result.hits)\n const isPending = deferredHits !== result.hits\n\n // requiring result.hits too hides the stale list the instant an empty result settles\n const hasSearchResults = deferredHits.length > 0 && result.hits.length > 0\n const hasNoSearchResults = result.hits.length === 0 && result.loaded\n const hasError = result.error\n\n /**\n * Add current search to recent searches, trigger child item click and close search\n */\n const handleSearchResultClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n if (recentSearchesStore) {\n recentSearchesStore.addSearch(terms, filters)\n }\n // We don't want to close the search if they are opening their result in a new tab\n if (!e.metaKey && !e.ctrlKey) {\n onClose?.()\n }\n },\n [filters, onClose, recentSearchesStore, terms],\n )\n\n const handleEndReached = useCallback(() => {\n dispatch({type: 'PAGE_INCREMENT'})\n }, [dispatch])\n\n const renderItem = useCallback<CommandListRenderItemCallback<WeightedHit>>(\n (item) => {\n return (\n <>\n <SearchResultItem\n disableIntentLink={disableIntentLink}\n documentId={item.hit._id || ''}\n documentType={item.hit._type}\n onClick={handleSearchResultClick}\n onItemSelect={onItemSelect}\n previewPerspective={previewPerspective}\n previewVariant={previewVariant}\n paddingY={1}\n />\n {debug && <DebugOverlay data={item} />}\n </>\n )\n },\n [\n debug,\n disableIntentLink,\n handleSearchResultClick,\n onItemSelect,\n previewPerspective,\n previewVariant,\n ],\n )\n\n return (\n <Flex>\n <Card\n borderTop={fullscreen || !!(hasError || hasSearchResults || hasNoSearchResults)}\n flex={1}\n >\n <Flex direction=\"column\" height=\"fill\">\n {/* Sort menu */}\n {hasSearchResults && <SortMenu />}\n\n {/* Results */}\n <SearchResultsInnerFlex\n $loadingFirstPage={result.loading && cursor === null}\n aria-busy={result.loading || isPending}\n flex={1}\n >\n {hasError ? (\n <SearchError />\n ) : (\n <>\n {hasSearchResults && (\n <CommandList\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={t('search.search-results-label')}\n data-testid=\"search-results\"\n fixedHeight\n initialIndex={lastActiveIndex}\n inputElement={inputElement}\n itemHeight={VIRTUAL_LIST_SEARCH_RESULT_ITEM_HEIGHT}\n items={deferredHits}\n overscan={VIRTUAL_LIST_OVERSCAN}\n onEndReached={handleEndReached}\n paddingX={2}\n paddingY={1}\n ref={setSearchCommandList}\n renderItem={renderItem}\n />\n )}\n {hasNoSearchResults && <NoResults />}\n </>\n )}\n </SearchResultsInnerFlex>\n </Flex>\n </Card>\n </Flex>\n )\n}\n","import {type StackablePerspective} from '@sanity/client'\nimport {Card, Portal, useClickOutsideEvent, useLayer} from '@sanity/ui'\nimport {AnimatePresence, motion, type Transition, type Variants} from 'motion/react'\nimport {useRef, useState} from 'react'\nimport FocusLock from 'react-focus-lock'\nimport {styled} from 'styled-components'\n\nimport {supportsTouch} from '../../../../../util/supportsTouch'\nimport {\n POPOVER_INPUT_PADDING,\n POPOVER_MAX_HEIGHT,\n POPOVER_MAX_WIDTH,\n POPOVER_RADIUS,\n} from '../constants'\nimport {useSearchState} from '../contexts/search/useSearchState'\nimport {hasSearchableTerms} from '../utils/hasSearchableTerms'\nimport {SearchWrapper} from './common/SearchWrapper'\nimport {Filters} from './filters/Filters'\nimport {RecentSearches} from './recentSearches/RecentSearches'\nimport {SearchHeader} from './SearchHeader'\nimport {type ItemSelectHandler} from './searchResults/item/SearchResultItem'\nimport {SearchResults} from './searchResults/SearchResults'\n\n/**\n * @internal\n */\nexport interface SearchPopoverProps {\n disableFocusLock?: boolean\n disableIntentLink?: boolean\n onClose: () => void\n onItemSelect?: ItemSelectHandler\n previewPerspective?: StackablePerspective[]\n /**\n * The variant the result previews are resolved in, as a bare variant id.\n */\n previewVariant?: string\n /**\n * If provided, will trigger to open the search popover when user types hotkey + k\n */\n onOpen?: () => void\n open: boolean\n}\n\nconst ANIMATION_TRANSITION: Transition = {\n duration: 0.4,\n type: 'spring',\n}\n\nconst CARD_VARIANTS: Variants = {\n open: {opacity: 1, scale: 1, x: '-50%'},\n closed: {opacity: 0, scale: 0.99, x: '-50%'},\n}\n\nconst OVERLAY_VARIANTS: Variants = {\n open: {opacity: 1},\n closed: {opacity: 0},\n}\n\nconst Y_POSITION = 12 // vh\n\nconst MotionOverlay = styled(motion.create(Card))`\n background-color: var(--card-backdrop-color);\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n`\n\nconst SearchMotionCard = styled(motion.create(Card))`\n display: flex !important;\n flex-direction: column;\n left: 50%;\n max-height: min(\n calc(100vh - ${Y_POSITION}vh - ${POPOVER_INPUT_PADDING}px),\n ${POPOVER_MAX_HEIGHT}px\n );\n position: absolute;\n top: ${Y_POSITION}vh;\n width: min(calc(100vw - ${POPOVER_INPUT_PADDING * 2}px), ${POPOVER_MAX_WIDTH}px);\n`\n\n/**\n * @internal\n */\nexport function SearchPopover({\n disableFocusLock,\n disableIntentLink,\n onClose,\n onItemSelect,\n onOpen,\n previewPerspective,\n previewVariant,\n open,\n}: SearchPopoverProps) {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null)\n\n const popoverElement = useRef<HTMLDivElement | null>(null)\n\n const {isTopLayer, zIndex} = useLayer()\n\n const {\n onClose: onSearchClose,\n state: {filtersVisible, terms},\n } = useSearchState()\n\n const hasValidTerms = hasSearchableTerms({terms})\n\n /**\n * Check for top-most layer to prevent closing if a portalled element (i.e. menu button) is active\n */\n useClickOutsideEvent(isTopLayer && open && !!onSearchClose && onSearchClose, () => [\n popoverElement.current,\n ])\n\n return (\n <SearchWrapper hasValidTerms={hasValidTerms} onClose={onClose} onOpen={onOpen} open={open}>\n <AnimatePresence>\n {open && (\n <Portal>\n <FocusLock autoFocus={!supportsTouch} disabled={disableFocusLock} returnFocus>\n <MotionOverlay\n animate=\"open\"\n exit=\"closed\"\n initial=\"closed\"\n style={{zIndex}}\n transition={ANIMATION_TRANSITION}\n variants={OVERLAY_VARIANTS}\n />\n\n <SearchMotionCard\n animate=\"open\"\n exit=\"closed\"\n initial=\"closed\"\n overflow=\"hidden\"\n radius={POPOVER_RADIUS}\n ref={popoverElement}\n shadow={2}\n style={{zIndex}}\n transition={ANIMATION_TRANSITION}\n variants={CARD_VARIANTS}\n >\n <SearchHeader onClose={onClose} ref={setInputElement} />\n {filtersVisible && (\n <Card borderTop flex=\"none\">\n <Filters />\n </Card>\n )}\n {hasValidTerms ? (\n <SearchResults\n inputElement={inputElement}\n onItemSelect={onItemSelect}\n disableIntentLink={disableIntentLink}\n previewPerspective={previewPerspective}\n previewVariant={previewVariant}\n />\n ) : (\n <RecentSearches inputElement={inputElement} />\n )}\n </SearchMotionCard>\n </FocusLock>\n </Portal>\n )}\n </AnimatePresence>\n </SearchWrapper>\n )\n}\n","import {type SearchTerms} from '../../../../../search/common/types'\nimport {type RecentSearch} from '../datastores/recentSearches'\n\nexport function isRecentSearchTerms(terms: SearchTerms | RecentSearch): terms is RecentSearch {\n return typeof (terms as RecentSearch).__recent !== 'undefined'\n}\n","import debug from 'debug'\n\nimport {DEBUG_FRAGMENT} from '../constants'\n\nconst rootName = 'core:studio:navbar:search:'\n\nexport function debugWithName(name: string): debug.Debugger {\n const namespace = `${rootName}${name}`\n if (debug && debug.enabled(namespace)) {\n return debug(namespace)\n }\n return debug(rootName)\n}\n\nexport function isDebugMode(): boolean {\n return typeof window === 'undefined'\n ? false\n : window.location.hash.slice(1).split(';').includes(DEBUG_FRAGMENT)\n}\n","import {type CurrentUser, type SchemaType, type SearchStrategy} from '@sanity/types'\n\nimport {type SearchHit, type SearchTerms} from '../../../../../../search/common/types'\nimport {removeDupes} from '../../../../../../util/draftUtils'\nimport {type RecentSearch} from '../../datastores/recentSearches'\nimport {type SearchFieldDefinitionDictionary} from '../../definitions/fields'\nimport {type SearchFilterDefinitionDictionary} from '../../definitions/filters'\nimport {getOrderings} from '../../definitions/getOrderings'\nimport {\n getOperatorDefinition,\n getOperatorInitialValue,\n type SearchOperatorDefinitionDictionary,\n} from '../../definitions/operators'\nimport {type SearchFilter, type SearchOrdering} from '../../types'\nimport {debugWithName, isDebugMode} from '../../utils/debug'\nimport {\n generateFilterQuery,\n getFieldFromFilter,\n getFilterKey,\n narrowDocumentTypes,\n} from '../../utils/filterUtils'\nimport {isRecentSearchTerms} from '../../utils/isRecentSearchTerms'\nimport {sortTypes} from '../../utils/selectors'\n\ninterface PaginationState {\n cursor: string | null\n nextCursor: string | null\n}\n\nexport type SearchReducerState = PaginationState & {\n currentUser: CurrentUser | null\n debug: boolean\n definitions: SearchDefinitions\n documentTypesNarrowed: string[]\n filters: SearchFilter[]\n filtersVisible: boolean\n fullscreen?: boolean\n lastAddedFilter?: SearchFilter | null\n lastActiveIndex: number\n ordering: SearchOrdering\n result: SearchResult\n terms: RecentSearch | SearchTerms\n strategy?: SearchStrategy\n disabledDocumentIds?: string[]\n canDisableAction?: boolean\n}\n\nexport interface SearchDefinitions {\n fields: SearchFieldDefinitionDictionary\n filters: SearchFilterDefinitionDictionary\n operators: SearchOperatorDefinitionDictionary\n}\n\nexport interface SearchResult {\n error: Error | null\n hasLocal: boolean\n hits: SearchHit[]\n loaded: boolean\n loading: boolean\n}\n\nexport interface InitialSearchState {\n currentUser: CurrentUser | null\n fullscreen?: boolean\n definitions: SearchDefinitions\n pagination: PaginationState\n strategy?: SearchStrategy\n}\n\nexport function initialSearchState({\n currentUser,\n fullscreen,\n definitions,\n pagination,\n strategy,\n}: InitialSearchState): SearchReducerState {\n return {\n currentUser,\n debug: isDebugMode(),\n documentTypesNarrowed: [],\n filters: [],\n filtersVisible: true,\n fullscreen,\n lastActiveIndex: -1,\n ordering: getOrderings({searchStrategy: strategy}).relevance,\n ...pagination,\n result: {\n error: null,\n hasLocal: false,\n hits: [],\n loaded: false,\n loading: false,\n },\n terms: {\n query: '',\n types: [],\n },\n definitions,\n strategy,\n }\n}\n\nexport type FiltersVisibleSet = {type: 'FILTERS_VISIBLE_SET'; visible: boolean}\nexport type LastActiveIndexSet = {type: 'LAST_ACTIVE_INDEX_SET'; index: number}\nexport type PageIncrement = {type: 'PAGE_INCREMENT'}\nexport type OrderingReset = {type: 'ORDERING_RESET'}\nexport type OrderingSet = {ordering: SearchOrdering; type: 'ORDERING_SET'}\nexport type SearchClear = {type: 'SEARCH_CLEAR'}\nexport type SearchRequestComplete = {\n type: 'SEARCH_REQUEST_COMPLETE'\n hits: SearchHit[]\n nextCursor: string | undefined\n}\nexport type SearchRequestError = {type: 'SEARCH_REQUEST_ERROR'; error: Error}\nexport type SearchRequestStart = {type: 'SEARCH_REQUEST_START'}\nexport type TermsFiltersAdd = {filter: SearchFilter; type: 'TERMS_FILTERS_ADD'}\nexport type TermsFiltersClear = {type: 'TERMS_FILTERS_CLEAR'}\nexport type TermsFiltersRemove = {filterKey: string; type: 'TERMS_FILTERS_REMOVE'}\nexport type TermsFiltersSetOperator = {\n filterKey: string\n operatorType: string\n type: 'TERMS_FILTERS_SET_OPERATOR'\n}\nexport type TermsFiltersSetValue = {\n filterKey: string\n type: 'TERMS_FILTERS_SET_VALUE'\n value?: any\n}\nexport type TermsQuerySet = {type: 'TERMS_QUERY_SET'; query: string}\nexport type TermsSet = {type: 'TERMS_SET'; filters?: SearchFilter[]; terms: SearchTerms}\nexport type TermsTypeAdd = {type: 'TERMS_TYPE_ADD'; schemaType: SchemaType}\nexport type TermsTypeRemove = {type: 'TERMS_TYPE_REMOVE'; schemaType: SchemaType}\nexport type TermsTypesClear = {type: 'TERMS_TYPES_CLEAR'}\n\nexport type SearchAction =\n | FiltersVisibleSet\n | LastActiveIndexSet\n | OrderingReset\n | OrderingSet\n | PageIncrement\n | SearchClear\n | SearchRequestComplete\n | SearchRequestError\n | SearchRequestStart\n | TermsFiltersAdd\n | TermsFiltersClear\n | TermsFiltersSetOperator\n | TermsFiltersRemove\n | TermsFiltersSetValue\n | TermsQuerySet\n | TermsSet\n | TermsTypeAdd\n | TermsTypeRemove\n | TermsTypesClear\n\nconst debug = debugWithName('reducer')\n\nexport function searchReducer(state: SearchReducerState, action: SearchAction): SearchReducerState {\n let prefix = '🔍'\n if (action.type.startsWith('SEARCH_REQUEST')) {\n prefix = '🚨'\n }\n if (action.type.startsWith('RECENT_SEARCHES')) {\n prefix = '💾'\n }\n debug(prefix, action)\n\n switch (action.type) {\n case 'FILTERS_VISIBLE_SET':\n return {\n ...state,\n filtersVisible: action.visible,\n }\n case 'LAST_ACTIVE_INDEX_SET':\n return {\n ...state,\n lastActiveIndex: action.index,\n }\n case 'ORDERING_RESET':\n return {\n ...state,\n ordering: getOrderings({searchStrategy: state.strategy}).relevance,\n terms: stripRecent(state.terms),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n case 'ORDERING_SET':\n return {\n ...state,\n ordering: action.ordering,\n terms: stripRecent(state.terms),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n case 'PAGE_INCREMENT':\n return {\n ...state,\n cursor: state.nextCursor ?? state.cursor,\n nextCursor: null,\n terms: stripRecent(state.terms),\n }\n case 'SEARCH_CLEAR':\n return {\n ...state,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n hasLocal: false,\n hits: [],\n },\n }\n case 'SEARCH_REQUEST_COMPLETE':\n return {\n ...state,\n nextCursor: action.nextCursor ?? null,\n result: {\n ...state.result,\n error: null,\n hasLocal: true,\n hits: removeDupes(\n [...(state.result.hasLocal ? state.result.hits : []), ...action.hits].map(\n ({hit}) => hit,\n ),\n ).map((hit) => ({hit})),\n loaded: true,\n loading: false,\n },\n }\n case 'SEARCH_REQUEST_ERROR':\n return {\n ...state,\n result: {\n ...state.result,\n error: action.error,\n loaded: false,\n loading: false,\n },\n }\n case 'SEARCH_REQUEST_START':\n return {\n ...state,\n result: {\n ...state.result,\n loaded: false,\n loading: true,\n },\n }\n case 'TERMS_FILTERS_ADD': {\n const newFilter: SearchFilter = {\n ...action.filter,\n value: getOperatorInitialValue(state.definitions.operators, action.filter.operatorType),\n }\n const filters = [...state.filters, newFilter]\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types: state.terms.types,\n }),\n filters,\n lastAddedFilter: newFilter,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_CLEAR': {\n const filters: SearchFilter[] = []\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types: state.terms.types,\n }),\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_REMOVE': {\n const index = state.filters.findIndex((filter) => getFilterKey(filter) === action.filterKey)\n\n const filters = [\n ...state.filters.slice(0, index), //\n ...state.filters.slice(index + 1),\n ]\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types: state.terms.types,\n }),\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_SET_OPERATOR': {\n // Compare input components between current and target operators, and update\n // target filter value if it has changed.\n const matchedFilter = state.filters.find(\n (filter) => getFilterKey(filter) === action.filterKey,\n )\n const currentOperator = getOperatorDefinition(\n state.definitions.operators,\n matchedFilter?.operatorType,\n )\n const nextOperator = getOperatorDefinition(state.definitions.operators, action.operatorType)\n const nextInitialValue = nextOperator?.initialValue\n const inputComponentChanged = currentOperator?.inputComponent != nextOperator?.inputComponent\n\n const filters = state.filters.map((filter) => {\n if (getFilterKey(filter) === action.filterKey) {\n return {\n ...filter,\n operatorType: action.operatorType,\n ...(inputComponentChanged ? {value: nextInitialValue} : {}),\n }\n }\n return filter\n })\n\n return {\n ...state,\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_FILTERS_SET_VALUE': {\n const filters = state.filters.map((filter) => {\n if (getFilterKey(filter) === action.filterKey) {\n return {\n ...filter,\n value: action.value,\n }\n }\n return filter\n })\n\n return {\n ...state,\n filters,\n cursor: null,\n nextCursor: null,\n terms: {\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n result: {\n ...state.result,\n hasLocal: false,\n },\n }\n }\n case 'TERMS_QUERY_SET':\n return {\n ...state,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n query: action.query,\n }),\n }\n case 'TERMS_SET': {\n const filters = action.filters || []\n const types = [\n ...(state.terms.types || []), //\n ...action.terms.types,\n ].sort(sortTypes)\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters,\n types,\n }),\n filters,\n lastAddedFilter: null,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: {\n ...action.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n filters,\n operatorDefinitions: state.definitions.operators,\n }),\n },\n }\n }\n case 'TERMS_TYPE_ADD': {\n const types = [\n ...(state.terms.types || []), //\n action.schemaType,\n ].sort(sortTypes)\n\n // Get narrowed document types based on selected types only (ignore filters)\n const documentTypesNarrowed = narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters: [],\n types,\n })\n\n // Remove field filters that don't qualify under the above narrowed document types.\n // Non field-filters are always included.\n const filters = state.filters.filter((f) => {\n const fieldDefinition = getFieldFromFilter(state.definitions.fields, f)\n if (fieldDefinition) {\n // An empty documentTypes array denotes support across all fields.\n if (fieldDefinition.documentTypes.length === 0) {\n return true\n }\n return documentTypesNarrowed.every(\n (type) => fieldDefinition.documentTypes.findIndex((t) => t === type) > -1,\n )\n }\n return true\n })\n\n return {\n ...state,\n documentTypesNarrowed,\n filters,\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n filter: generateFilterQuery({\n fieldDefinitions: state.definitions.fields,\n filterDefinitions: state.definitions.filters,\n operatorDefinitions: state.definitions.operators,\n filters,\n }),\n types,\n }),\n }\n }\n case 'TERMS_TYPE_REMOVE': {\n const types = (state.terms.types || []).filter((s) => s !== action.schemaType)\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters: state.filters,\n types,\n }),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n types,\n }),\n }\n }\n case 'TERMS_TYPES_CLEAR': {\n const types: SchemaType[] = []\n\n return {\n ...state,\n documentTypesNarrowed: narrowDocumentTypes({\n fieldDefinitions: state.definitions.fields,\n filters: state.filters,\n types,\n }),\n cursor: null,\n nextCursor: null,\n result: {\n ...state.result,\n loaded: false,\n hasLocal: false,\n },\n terms: stripRecent({\n ...state.terms,\n types: [],\n }),\n }\n }\n default:\n return state\n }\n}\n\n/**\n * This function is used to strip __recent from terms, generally whenever there's a change in\n * search terms or options that would otherwise trigger an additional search request.\n * (e.g. updating the search query, changing a sort filter, adding / removing document types)\n *\n * This is done so we can better disambiguate between requests sent as a result of clicking a 'recent search'\n * for purposes of measurement.\n *\n */\n// @todo: remove this (and associated tests) once client-side instrumentation is available\nfunction stripRecent(terms: RecentSearch | SearchTerms) {\n if (isRecentSearchTerms(terms)) {\n const {__recent, ...rest} = terms\n return rest\n }\n return terms\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {type ReactNode, useCallback, useEffect, useMemo, useReducer, useRef, useState} from 'react'\nimport {SearchContext} from 'sanity/_singletons'\n\nimport {type CommandListHandle} from '../../../../../../components/commandList/types'\nimport {useSchema} from '../../../../../../hooks/useSchema'\nimport {useActiveReleases} from '../../../../../../releases/store/useActiveReleases'\nimport {type SearchHit, type SearchTerms} from '../../../../../../search/common/types'\nimport {useCurrentUser} from '../../../../../../store/user/hooks'\nimport {useSource} from '../../../../../source'\nimport {GlobalSearchLatencyMeasured} from '../../__telemetry__/search.telemetry'\nimport {SEARCH_LIMIT} from '../../constants'\nimport {type RecentSearch} from '../../datastores/recentSearches'\nimport {createFieldDefinitionDictionary, createFieldDefinitions} from '../../definitions/fields'\nimport {createFilterDefinitionDictionary} from '../../definitions/filters'\nimport {createOperatorDefinitionDictionary} from '../../definitions/operators'\nimport {useSearch} from '../../hooks/useSearch'\nimport {type SearchOrdering} from '../../types'\nimport {validateFilter} from '../../utils/filterUtils'\nimport {hasSearchableTerms} from '../../utils/hasSearchableTerms'\nimport {isRecentSearchTerms} from '../../utils/isRecentSearchTerms'\nimport {initialSearchState, searchReducer} from './reducer'\n\ninterface SearchProviderProps {\n children?: ReactNode\n fullscreen?: boolean\n /**\n * list of perspective ids\n * if provided, then it means that the search is being done using a specific list of perspectives\n */\n\n /**\n * list of document ids that should be be disabled in the search\n * if they are found to exist in the search results\n * if provided, then ids should be checked against this list\n */\n disabledDocumentIds?: string[]\n /**\n * If true, the search action (such as adding a document to a release list, for example) should be allowed to disable under the right conditions\n */\n canDisableAction?: boolean\n}\n\n/**\n * @internal\n */\nexport function SearchProvider({\n children,\n fullscreen,\n disabledDocumentIds,\n canDisableAction,\n}: SearchProviderProps) {\n const [onClose, setOnClose] = useState<(() => void) | null>(null)\n const [searchCommandList, setSearchCommandList] = useState<CommandListHandle | null>(null)\n const {data: releases} = useActiveReleases()\n const schema = useSchema()\n const currentUser = useCurrentUser()\n const {\n search: {operators, filters, strategy},\n // oxlint-disable-next-line no-deprecated -- will fix in follow up PR\n } = useSource()\n const telemetry = useTelemetry()\n\n // Timing ref for `Global Search Latency Measured`. Set to `performance.now()`\n // on a valid (searchable-terms) `onStart`, cleared on log. Null means the\n // most recent `onStart` was for empty/invalid terms — skip logging.\n const searchStartRef = useRef<number | null>(null)\n // Snapshot of terms at `onStart` time, used to build the log payload in\n // `onComplete`/`onError` without racing the state update.\n const searchStartTermsRef = useRef<SearchTerms | RecentSearch | null>(null)\n\n // Create field, filter and operator dictionaries\n const {fieldDefinitions, filterDefinitions, operatorDefinitions} = useMemo(() => {\n return {\n fieldDefinitions: createFieldDefinitionDictionary(createFieldDefinitions(schema, filters)),\n filterDefinitions: createFilterDefinitionDictionary(filters),\n operatorDefinitions: createOperatorDefinitionDictionary(operators),\n }\n }, [filters, operators, schema])\n\n const initialState = useMemo(\n () =>\n initialSearchState({\n currentUser,\n fullscreen,\n definitions: {\n fields: fieldDefinitions,\n operators: operatorDefinitions,\n filters: filterDefinitions,\n },\n pagination: {\n cursor: null,\n nextCursor: null,\n },\n strategy,\n }),\n [currentUser, fullscreen, fieldDefinitions, operatorDefinitions, filterDefinitions, strategy],\n )\n const [state, dispatch] = useReducer(searchReducer, initialState)\n\n const {documentTypesNarrowed, filters: currentFilters, ordering, cursor, result, terms} = state\n\n const isMountedRef = useRef(false)\n const previousOrderingRef = useRef<SearchOrdering>(initialState.ordering)\n const previousCursorRef = useRef<string | null>(initialState.cursor)\n const previousTermsRef = useRef<SearchTerms | RecentSearch>(initialState.terms)\n\n // Keep a live ref to the current terms so that the `onStart` callback\n // (fired synchronously inside the `useSearch` observable pipeline) can\n // snapshot the *current* search's terms, not the previous one. The ref\n // is updated in an effect rather than during render, because React\n // Compiler forbids writes to refs during render.\n const currentTermsRef = useRef<SearchTerms | RecentSearch>(terms)\n useEffect(() => {\n currentTermsRef.current = terms\n }, [terms])\n\n const handleSearchComplete = useCallback(\n (searchResult: {hits: SearchHit[]; nextCursor: string | undefined}) => {\n const t0 = searchStartRef.current\n const startTerms = searchStartTermsRef.current\n searchStartRef.current = null\n searchStartTermsRef.current = null\n dispatch({...searchResult, type: 'SEARCH_REQUEST_COMPLETE'})\n if (t0 !== null && startTerms !== null) {\n telemetry.log(GlobalSearchLatencyMeasured, {\n durationMs: performance.now() - t0,\n queryLength: startTerms.query.length,\n typeFilterCount: startTerms.types.length,\n resultCount: searchResult.hits.length,\n strategy: strategy ?? null,\n errored: false,\n })\n }\n },\n [strategy, telemetry],\n )\n\n const handleSearchError = useCallback(\n (error: Error) => {\n const t0 = searchStartRef.current\n const startTerms = searchStartTermsRef.current\n searchStartRef.current = null\n searchStartTermsRef.current = null\n dispatch({error, type: 'SEARCH_REQUEST_ERROR'})\n if (t0 !== null && startTerms !== null) {\n telemetry.log(GlobalSearchLatencyMeasured, {\n durationMs: performance.now() - t0,\n queryLength: startTerms.query.length,\n typeFilterCount: startTerms.types.length,\n resultCount: 0,\n strategy: strategy ?? null,\n errored: true,\n })\n }\n },\n [strategy, telemetry],\n )\n\n const handleSearchStart = useCallback(() => {\n // `useSearch` fires `onStart` for every request, including empty-term\n // short-circuit paths. Only start the timer if we have searchable terms.\n const currentTerms = currentTermsRef.current\n if (hasSearchableTerms({terms: currentTerms})) {\n searchStartRef.current = performance.now()\n searchStartTermsRef.current = currentTerms\n } else {\n searchStartRef.current = null\n searchStartTermsRef.current = null\n }\n dispatch({type: 'SEARCH_REQUEST_START'})\n }, [])\n\n const {handleSearch, searchState} = useSearch({\n initialState: {...result, terms},\n onComplete: handleSearchComplete,\n onError: handleSearchError,\n onStart: handleSearchStart,\n schema,\n })\n\n const hasValidTerms = hasSearchableTerms({terms})\n\n // Get a narrowed list of document types to search on based on any current active filters.\n const documentTypes = documentTypesNarrowed.map((documentType) => schema.get(documentType)!)\n\n // Get a list of 'complete' filters (filters that return valid values)\n const completeFilters = currentFilters.filter((filter) =>\n validateFilter({\n fieldDefinitions,\n filter,\n filterDefinitions,\n operatorDefinitions,\n }),\n )\n\n /**\n * Trigger search when any terms (query or selected types) OR current pageIndex has changed\n *\n * Note that we compare inbound terms with our last local snapshot, and not the value of\n * `searchState` from `useSearch`, as that only contains a reference to the last fully _executed_ request.\n * There are cases were we may not run searches when terms change (e.g. when search terms are empty / invalid).\n */\n useEffect(() => {\n const orderingChanged = !isEqual(ordering, previousOrderingRef.current)\n const cursorChanged = cursor !== previousCursorRef.current\n const termsChanged = !isEqual(terms, previousTermsRef.current)\n\n if (orderingChanged || cursorChanged || termsChanged) {\n let sortLabel = 'findability-sort:'\n\n if (ordering?.customMeasurementLabel || ordering.sort) {\n // Use a custom label if provided, otherwise return field and direction, e.g. `_updatedAt desc`\n sortLabel +=\n ordering?.customMeasurementLabel || `${ordering.sort?.field} ${ordering.sort?.direction}`\n }\n\n handleSearch({\n options: {\n // Comments prepended to each query for future measurement\n comments: [\n ...(isRecentSearchTerms(terms)\n ? [`findability-recent-search:${terms.__recent.index}`]\n : []),\n `findability-selected-types:${terms.types.length}`,\n sortLabel,\n `findability-source: global`,\n `findability-filter-count:${completeFilters.length}`,\n ],\n // `groq2024` supports pagination. Therefore, fetch fewer results.\n limit: strategy === 'groq2024' ? 25 : SEARCH_LIMIT,\n skipSortByScore: ordering.ignoreScore,\n ...(ordering.sort ? {sort: [ordering.sort]} : {}),\n cursor: cursor || undefined,\n perspective: 'raw',\n },\n terms: {\n ...terms,\n // Narrow document type search\n ...(documentTypes ? {types: documentTypes} : {}),\n },\n })\n\n // Update previousCursorRef snapshot only on a valid search request\n if (cursorChanged) {\n previousCursorRef.current = cursor\n }\n }\n\n // Update snapshots, even if no search request was executed\n previousOrderingRef.current = ordering\n previousTermsRef.current = terms\n }, [\n completeFilters.length,\n currentFilters,\n documentTypes,\n handleSearch,\n hasValidTerms,\n ordering,\n searchState.terms,\n terms,\n cursor,\n strategy,\n releases,\n ])\n\n /**\n * Reset search hits / state when (after initial amount):\n * - we have no valid search terms and\n * - we have existing hits\n */\n useEffect(() => {\n if (!hasValidTerms && isMountedRef?.current && result.hits.length > 0) {\n dispatch({type: 'SEARCH_CLEAR'})\n }\n\n isMountedRef.current = true\n }, [dispatch, hasValidTerms, result.hits, terms.query, terms.types])\n\n const value = useMemo(\n () => ({\n dispatch,\n onClose,\n searchCommandList,\n setSearchCommandList,\n setOnClose,\n state: {\n ...state,\n fullscreen,\n disabledDocumentIds,\n canDisableAction,\n },\n }),\n [fullscreen, disabledDocumentIds, canDisableAction, onClose, searchCommandList, state],\n )\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>\n}\n"],"mappings":"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"}