sanity 6.9.2-next.21 → 6.9.2-next.22

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 (105) hide show
  1. package/lib/{AddonDatasetProvider-B5npf4J4.js → AddonDatasetProvider-CfAw3oMr.js} +2 -2
  2. package/lib/{AddonDatasetProvider-B5npf4J4.js.map → AddonDatasetProvider-CfAw3oMr.js.map} +1 -1
  3. package/lib/{CalendarFilter-DYJEZDCP.js → CalendarFilter-OHGevGRx.js} +3 -3
  4. package/lib/{CalendarFilter-DYJEZDCP.js.map → CalendarFilter-OHGevGRx.js.map} +1 -1
  5. package/lib/{CommentsDocumentLayout-CTL7lt6a.js → CommentsDocumentLayout-p8p-oNuH.js} +2 -2
  6. package/lib/{CommentsDocumentLayout-CTL7lt6a.js.map → CommentsDocumentLayout-p8p-oNuH.js.map} +1 -1
  7. package/lib/{CommentsField-BE_CI2SY.js → CommentsField-CqXs722Y.js} +3 -3
  8. package/lib/{CommentsField-BE_CI2SY.js.map → CommentsField-CqXs722Y.js.map} +1 -1
  9. package/lib/{CommentsInput-D_EM-t5a.js → CommentsInput-B3rd8HlF.js} +5 -5
  10. package/lib/{CommentsInput-D_EM-t5a.js.map → CommentsInput-B3rd8HlF.js.map} +1 -1
  11. package/lib/{CommentsInspector-DtBIUadl.js → CommentsInspector-DTHmjTFc.js} +5 -5
  12. package/lib/{CommentsInspector-DtBIUadl.js.map → CommentsInspector-DTHmjTFc.js.map} +1 -1
  13. package/lib/{CommentsListItem-BFRqZMJ6.js → CommentsListItem-C2Ac0esL.js} +3 -3
  14. package/lib/{CommentsListItem-BFRqZMJ6.js.map → CommentsListItem-C2Ac0esL.js.map} +1 -1
  15. package/lib/{CommentsSelectedPathProvider-CIKpHpK3.js → CommentsSelectedPathProvider-DwDw8s-s.js} +3 -3
  16. package/lib/{CommentsSelectedPathProvider-CIKpHpK3.js.map → CommentsSelectedPathProvider-DwDw8s-s.js.map} +1 -1
  17. package/lib/{CommentsStudioLayout-Dx0jIDle.js → CommentsStudioLayout-e2hCA_5z.js} +4 -4
  18. package/lib/{CommentsStudioLayout-Dx0jIDle.js.map → CommentsStudioLayout-e2hCA_5z.js.map} +1 -1
  19. package/lib/{ReleasesMetadataProvider-hILX90V4.js → ReleasesMetadataProvider-BWsmHWkh.js} +2 -2
  20. package/lib/{ReleasesMetadataProvider-hILX90V4.js.map → ReleasesMetadataProvider-BWsmHWkh.js.map} +1 -1
  21. package/lib/{ReleasesNav-DIv-1iR7.js → ReleasesNav-DPSjEs29.js} +14 -14
  22. package/lib/{ReleasesNav-DIv-1iR7.js.map → ReleasesNav-DPSjEs29.js.map} +1 -1
  23. package/lib/{ReleasesStudioLayout-DW7fJSfG.js → ReleasesStudioLayout-CtyE88nI.js} +8 -8
  24. package/lib/{ReleasesStudioLayout-DW7fJSfG.js.map → ReleasesStudioLayout-CtyE88nI.js.map} +1 -1
  25. package/lib/{ReleasesTool-BQjO7osC.js → ReleasesTool-BjbRMZlc.js} +15 -15
  26. package/lib/{ReleasesTool-BQjO7osC.js.map → ReleasesTool-BjbRMZlc.js.map} +1 -1
  27. package/lib/{SchedulePublishingStudioLayout-Cwmdz7HZ.js → SchedulePublishingStudioLayout-gZWH97ZL.js} +3 -3
  28. package/lib/{SchedulePublishingStudioLayout-Cwmdz7HZ.js.map → SchedulePublishingStudioLayout-gZWH97ZL.js.map} +1 -1
  29. package/lib/{SchedulePublishingUpsellProvider-C5B21VDh.js → SchedulePublishingUpsellProvider-DsI8OUg-.js} +2 -2
  30. package/lib/{SchedulePublishingUpsellProvider-C5B21VDh.js.map → SchedulePublishingUpsellProvider-DsI8OUg-.js.map} +1 -1
  31. package/lib/{ScheduledPublishingEnabledProvider-BNMAVqrS.js → ScheduledPublishingEnabledProvider-BDRtV8OB.js} +3 -3
  32. package/lib/{ScheduledPublishingEnabledProvider-BNMAVqrS.js.map → ScheduledPublishingEnabledProvider-BDRtV8OB.js.map} +1 -1
  33. package/lib/{SearchProvider-DkGUk8a6.js → SearchProvider-Hk7IMQqR.js} +4 -4
  34. package/lib/{SearchProvider-DkGUk8a6.js.map → SearchProvider-Hk7IMQqR.js.map} +1 -1
  35. package/lib/{SingleDocReleaseLayout-fW8U-ktp.js → SingleDocReleaseLayout-evCp37zs.js} +2 -2
  36. package/lib/{SingleDocReleaseLayout-fW8U-ktp.js.map → SingleDocReleaseLayout-evCp37zs.js.map} +1 -1
  37. package/lib/{SingleDocReleaseUpsellProvider-BNF2Rj3j.js → SingleDocReleaseUpsellProvider-BOe2BACb.js} +4 -4
  38. package/lib/{SingleDocReleaseUpsellProvider-BNF2Rj3j.js.map → SingleDocReleaseUpsellProvider-BOe2BACb.js.map} +1 -1
  39. package/lib/{TasksStudioActiveToolLayout-CHazNA61.js → TasksStudioActiveToolLayout-Dbs-1GX6.js} +11 -11
  40. package/lib/{TasksStudioActiveToolLayout-CHazNA61.js.map → TasksStudioActiveToolLayout-Dbs-1GX6.js.map} +1 -1
  41. package/lib/{TasksStudioLayout-B7bCL28Q.js → TasksStudioLayout-Pn-RwtPi.js} +5 -5
  42. package/lib/{TasksStudioLayout-B7bCL28Q.js.map → TasksStudioLayout-Pn-RwtPi.js.map} +1 -1
  43. package/lib/{Tool-rkq_tjXo.js → Tool-D4-WLZtb.js} +12 -12
  44. package/lib/{Tool-rkq_tjXo.js.map → Tool-D4-WLZtb.js.map} +1 -1
  45. package/lib/{UnpublishVersionDialog-DWYCXGkz.js → UnpublishVersionDialog-DmFHVqhI.js} +4 -4
  46. package/lib/{UnpublishVersionDialog-DWYCXGkz.js.map → UnpublishVersionDialog-DmFHVqhI.js.map} +1 -1
  47. package/lib/{UpsellDialog-BiDSVmne.js → UpsellDialog-DRhOCOce.js} +2 -2
  48. package/lib/{UpsellDialog-BiDSVmne.js.map → UpsellDialog-DRhOCOce.js.map} +1 -1
  49. package/lib/{VariantsStudioNavbar-Bae9LOIN.js → VariantsStudioNavbar-CXpr7UUl.js} +7 -7
  50. package/lib/{VariantsStudioNavbar-Bae9LOIN.js.map → VariantsStudioNavbar-CXpr7UUl.js.map} +1 -1
  51. package/lib/{VariantsTool-E4ptTHik.js → VariantsTool-BCtrSWfP.js} +7 -7
  52. package/lib/{VariantsTool-E4ptTHik.js.map → VariantsTool-BCtrSWfP.js.map} +1 -1
  53. package/lib/{WorkspaceLoader-sdFQ9rkh.js → WorkspaceLoader-_w6NnbDb.js} +21 -21
  54. package/lib/{WorkspaceLoader-sdFQ9rkh.js.map → WorkspaceLoader-_w6NnbDb.js.map} +1 -1
  55. package/lib/_createContext.js +1 -1
  56. package/lib/{buildTextSelectionFromFragment-CuXpitEZ.js → buildTextSelectionFromFragment-Egmw5rNs.js} +3 -3
  57. package/lib/{buildTextSelectionFromFragment-CuXpitEZ.js.map → buildTextSelectionFromFragment-Egmw5rNs.js.map} +1 -1
  58. package/lib/{datastores-XTDIa3jc.js → datastores-DpJ5Y313.js} +2 -2
  59. package/lib/{datastores-XTDIa3jc.js.map → datastores-DpJ5Y313.js.map} +1 -1
  60. package/lib/index.js +28 -28
  61. package/lib/{inputResolver-DLP8YZcM.js → inputResolver-BX-VuloN.js} +4 -4
  62. package/lib/{inputResolver-DLP8YZcM.js.map → inputResolver-BX-VuloN.js.map} +1 -1
  63. package/lib/{navigation.telemetry-4pppJENG.js → navigation.telemetry-VbqjOek0.js} +7 -7
  64. package/lib/{navigation.telemetry-4pppJENG.js.map → navigation.telemetry-VbqjOek0.js.map} +1 -1
  65. package/lib/{plugin-BmARoHKH.js → plugin-DGOEvpWT.js} +4 -4
  66. package/lib/{plugin-BmARoHKH.js.map → plugin-DGOEvpWT.js.map} +1 -1
  67. package/lib/{plugin-BUox1zeI.js → plugin-Da_fKb0U.js} +3 -3
  68. package/lib/{plugin-BUox1zeI.js.map → plugin-Da_fKb0U.js.map} +1 -1
  69. package/lib/{plugin-CjN39wwt.js → plugin-DqqaZdOH.js} +5 -5
  70. package/lib/{plugin-CjN39wwt.js.map → plugin-DqqaZdOH.js.map} +1 -1
  71. package/lib/{plugin-BRnqEpCl.js → plugin-qHXYpO99.js} +6 -6
  72. package/lib/{plugin-BRnqEpCl.js.map → plugin-qHXYpO99.js.map} +1 -1
  73. package/lib/{scheduleItem-Dtb26ejO.js → scheduleItem-DcC1HE9G.js} +8 -8
  74. package/lib/{scheduleItem-Dtb26ejO.js.map → scheduleItem-DcC1HE9G.js.map} +1 -1
  75. package/lib/{schedules-6qsR7E_I.js → schedules-CbnXaXM9.js} +3 -3
  76. package/lib/{schedules-6qsR7E_I.js.map → schedules-CbnXaXM9.js.map} +1 -1
  77. package/lib/{searchDocumentRelease-CUk7BiST.js → searchDocumentRelease-C5sClmGF.js} +4 -4
  78. package/lib/{searchDocumentRelease-CUk7BiST.js.map → searchDocumentRelease-C5sClmGF.js.map} +1 -1
  79. package/lib/{studioClient-D1Z2zK3C.js → studioClient-CwMJwOTd.js} +2 -2
  80. package/lib/{studioClient-D1Z2zK3C.js.map → studioClient-CwMJwOTd.js.map} +1 -1
  81. package/lib/{useBundleDocuments-BnCBcbdJ.js → useBundleDocuments-DvVAF6cf.js} +7 -7
  82. package/lib/{useBundleDocuments-BnCBcbdJ.js.map → useBundleDocuments-DvVAF6cf.js.map} +1 -1
  83. package/lib/{useComments-Bm-0CwNH.js → useComments-DuEOnDkA.js} +2 -2
  84. package/lib/{useComments-Bm-0CwNH.js.map → useComments-DuEOnDkA.js.map} +1 -1
  85. package/lib/{useCommentsTelemetry-D1kYRuPU.js → useCommentsTelemetry-BgNdQdz5.js} +3 -3
  86. package/lib/{useCommentsTelemetry-D1kYRuPU.js.map → useCommentsTelemetry-BgNdQdz5.js.map} +1 -1
  87. package/lib/{useDocumentPreviewValues-DJvES8Wi.js → useDocumentPreviewValues-B1zNjl_D.js} +3 -3
  88. package/lib/{useDocumentPreviewValues-DJvES8Wi.js.map → useDocumentPreviewValues-B1zNjl_D.js.map} +1 -1
  89. package/lib/{useFeatureEnabled-g8eZoiLM.js → useFeatureEnabled-4qCpV_mX.js} +2 -2
  90. package/lib/{useFeatureEnabled-g8eZoiLM.js.map → useFeatureEnabled-4qCpV_mX.js.map} +1 -1
  91. package/lib/{useFieldActions-BV_qfe65.js → useFieldActions-uDe2qh98.js} +2 -2
  92. package/lib/{useFieldActions-BV_qfe65.js.map → useFieldActions-uDe2qh98.js.map} +1 -1
  93. package/lib/{useReleasesToolAvailable-Duu10qV0.js → useReleasesToolAvailable-DDuNc6HV.js} +3 -3
  94. package/lib/{useReleasesToolAvailable-Duu10qV0.js.map → useReleasesToolAvailable-DDuNc6HV.js.map} +1 -1
  95. package/lib/{useScheduledDraftMenuActions-Byiy3-k3.js → useScheduledDraftMenuActions-DqkHlC0c.js} +5 -5
  96. package/lib/{useScheduledDraftMenuActions-Byiy3-k3.js.map → useScheduledDraftMenuActions-DqkHlC0c.js.map} +1 -1
  97. package/lib/{useStudioUrl-BEb30_UK.js → useStudioUrl-B4w58A2i.js} +5 -5
  98. package/lib/{useStudioUrl-BEb30_UK.js.map → useStudioUrl-B4w58A2i.js.map} +1 -1
  99. package/lib/{useTimeZone-zs0ybzXu.js → useTimeZone-8Wd1UR4j.js} +2 -2
  100. package/lib/{useTimeZone-zs0ybzXu.js.map → useTimeZone-8Wd1UR4j.js.map} +1 -1
  101. package/lib/{validationUtils-LdwtMTh5.js → validationUtils-Cuk0jhWJ.js} +4 -4
  102. package/lib/{validationUtils-LdwtMTh5.js.map → validationUtils-Cuk0jhWJ.js.map} +1 -1
  103. package/lib/{version-XEmBTnIh.js → version-BVcB_xWL.js} +2 -2
  104. package/lib/{version-XEmBTnIh.js.map → version-BVcB_xWL.js.map} +1 -1
  105. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"SearchProvider-DkGUk8a6.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","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","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","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","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","Code","Stack","useSearchState","DebugDocumentTypesNarrowed","$","_c","state","t0","documentTypesNarrowed","t1","Symbol","for","t2","whiteSpace","t3","length","join","t4","Card","Code","Stack","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","MenuDivider","Stack","Text","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","Code","Stack","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","Code","Stack","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","Code","Inline","Stack","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/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/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/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/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/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 {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 {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 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 {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","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, Code, Stack} from '@sanity/ui'\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, Code, Stack} from '@sanity/ui'\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, MenuDivider, Stack, Text} from '@sanity/ui'\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, Code, Stack} from '@sanity/ui'\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, Code, Stack} from '@sanity/ui'\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, Menu, MenuDivider} from '@sanity/ui'\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, Menu, MenuDivider} from '@sanity/ui'\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, Code, Inline, Stack} from '@sanity/ui'\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-Hk7IMQqR.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","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","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","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","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","Code","Stack","useSearchState","DebugDocumentTypesNarrowed","$","_c","state","t0","documentTypesNarrowed","t1","Symbol","for","t2","whiteSpace","t3","length","join","t4","Card","Code","Stack","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","MenuDivider","Stack","Text","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","Code","Stack","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","Code","Stack","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","Code","Inline","Stack","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/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/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/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/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/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 {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 {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 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 {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","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, Code, Stack} from '@sanity/ui'\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, Code, Stack} from '@sanity/ui'\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, MenuDivider, Stack, Text} from '@sanity/ui'\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, Code, Stack} from '@sanity/ui'\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, Code, Stack} from '@sanity/ui'\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, Menu, MenuDivider} from '@sanity/ui'\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, Menu, MenuDivider} from '@sanity/ui'\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, Code, Inline, Stack} from '@sanity/ui'\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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"}