@servicetitan/anvil2 3.15.1 → 3.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/{Announcement-Cnz80WGx.js → Announcement-PfnsVVz1.js} +5 -2
- package/dist/Announcement-PfnsVVz1.js.map +1 -0
- package/dist/Announcement.js +1 -1
- package/dist/{DataTable-DkEpJ_Op.js → DataTable-DIXP9-Bx.js} +4 -4
- package/dist/{DataTable-DkEpJ_Op.js.map → DataTable-DIXP9-Bx.js.map} +1 -1
- package/dist/{Dialog-B9llUKJz.js → Dialog-_tHqOsbr.js} +2 -2
- package/dist/{Dialog-B9llUKJz.js.map → Dialog-_tHqOsbr.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-Bjd2XLUX.js → Drawer-D-ThWNp0.js} +2 -2
- package/dist/{Drawer-Bjd2XLUX.js.map → Drawer-D-ThWNp0.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/{FilterBar-ecqJDraA.js → FilterBar-jFn8O7v7.js} +17 -15
- package/dist/FilterBar-jFn8O7v7.js.map +1 -0
- package/dist/FilterBar.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-DpPO0cya.js → MultiSelectFieldSync-DuImKXuj.js} +3 -3
- package/dist/{MultiSelectFieldSync-DpPO0cya.js.map → MultiSelectFieldSync-DuImKXuj.js.map} +1 -1
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-BN_3moW_.js → MultiSelectMenuSync-BhNXsgAN.js} +3 -3
- package/dist/{MultiSelectMenuSync-BN_3moW_.js.map → MultiSelectMenuSync-BhNXsgAN.js.map} +1 -1
- package/dist/{Page-IZ4p51iJ.js → Page-ZSHNJs7z.js} +2 -2
- package/dist/{Page-IZ4p51iJ.js.map → Page-ZSHNJs7z.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-Su4VBAhT.js → Pagination-Bsl99RRI.js} +4 -2
- package/dist/{Pagination-Su4VBAhT.js.map → Pagination-Bsl99RRI.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{ProgressBar-TQ0fPmn9.js → ProgressBar-zPKYv4Il.js} +10 -13
- package/dist/ProgressBar-zPKYv4Il.js.map +1 -0
- package/dist/ProgressBar.css +10 -14
- package/dist/ProgressBar.js +1 -1
- package/dist/{RichTextEditor-BpzUo8dB.js → RichTextEditor-DcAVqd2d.js} +18821 -20223
- package/dist/RichTextEditor-DcAVqd2d.js.map +1 -0
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-D9GJbJQu.js → SavedFiltersButton-Bl8mr-LB.js} +4 -4
- package/dist/{SavedFiltersButton-D9GJbJQu.js.map → SavedFiltersButton-Bl8mr-LB.js.map} +1 -1
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-BN2ebLWT.js → SelectFieldSync-SS7FELT3.js} +3 -3
- package/dist/{SelectFieldSync-BN2ebLWT.js.map → SelectFieldSync-SS7FELT3.js.map} +1 -1
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-DuPf8KCc.js → SelectMenuSync-CPpE6vUG.js} +3 -3
- package/dist/{SelectMenuSync-DuPf8KCc.js.map → SelectMenuSync-CPpE6vUG.js.map} +1 -1
- package/dist/{SelectOptions-BK7kNjYM.js → SelectOptions-BDAu_9dv.js} +2 -2
- package/dist/{SelectOptions-BK7kNjYM.js.map → SelectOptions-BDAu_9dv.js.map} +1 -1
- package/dist/Table.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-BryQmKe1.js → Toaster-SqkX0Kes.js} +2 -2
- package/dist/{Toaster-BryQmKe1.js.map → Toaster-SqkX0Kes.js.map} +1 -1
- package/dist/{Toaster-BtP_HezK.js → Toaster-dVGVVcat.js} +2 -2
- package/dist/{Toaster-BtP_HezK.js.map → Toaster-dVGVVcat.js.map} +1 -1
- package/dist/assets/icons/material.ts +184 -184
- package/dist/assets/icons/st.ts +9 -9
- package/dist/beta.js +9 -9
- package/dist/{bulkActionTypes-D5y3Acn1.js → bulkActionTypes-SukoplGV.js} +2 -2
- package/dist/{bulkActionTypes-D5y3Acn1.js.map → bulkActionTypes-SukoplGV.js.map} +1 -1
- package/dist/downshift.esm-U4VMqrF-.js.map +1 -1
- package/dist/extends-Bg2s_OKl.js.map +1 -1
- package/dist/{filter-state-Do862BNr.js → filter-state-hDtCUggM.js} +6 -6
- package/dist/{filter-state-Do862BNr.js.map → filter-state-hDtCUggM.js.map} +1 -1
- package/dist/{index-Dt0zG4YB.js → index-C2dOrf4N.js} +1549 -1582
- package/dist/index-C2dOrf4N.js.map +1 -0
- package/dist/index.js +11 -11
- package/dist/src/components/Pagination/Pagination.d.ts +28 -0
- package/dist/src/internal/components/LoadMoreSlot.d.ts +13 -0
- package/dist/src/internal/hooks/useAutoLoadMore.d.ts +40 -0
- package/dist/src/internal/hooks/useFocusReturnOnUnmount.d.ts +10 -0
- package/dist/{syncFilterUtils-ClEj4Oeg.js → syncFilterUtils-SMop8ckR.js} +177 -62
- package/dist/syncFilterUtils-SMop8ckR.js.map +1 -0
- package/package.json +21 -21
- package/dist/Announcement-Cnz80WGx.js.map +0 -1
- package/dist/FilterBar-ecqJDraA.js.map +0 -1
- package/dist/ProgressBar-TQ0fPmn9.js.map +0 -1
- package/dist/RichTextEditor-BpzUo8dB.js.map +0 -1
- package/dist/check_circle-C3DDoVXp.js +0 -8
- package/dist/check_circle-C3DDoVXp.js.map +0 -1
- package/dist/index-Dt0zG4YB.js.map +0 -1
- package/dist/src/internal/components/InView.d.ts +0 -14
- package/dist/syncFilterUtils-ClEj4Oeg.js.map +0 -1
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
type InViewProps = {
|
|
3
|
-
children?: ReactNode;
|
|
4
|
-
/** Receives each observed viewport-visibility change. */
|
|
5
|
-
onVisibilityChange?: (isVisible: boolean) => void;
|
|
6
|
-
/** Expands or contracts the viewport bounds using CSS margin syntax. */
|
|
7
|
-
rootMargin?: string;
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Wraps content in an Intersection Observer target and reports viewport
|
|
11
|
-
* visibility.
|
|
12
|
-
*/
|
|
13
|
-
export declare const InView: ({ children, onVisibilityChange, rootMargin, }: InViewProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"syncFilterUtils-ClEj4Oeg.js","sources":["../src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.ts","../src/internal/components/SelectOption.tsx","../src/internal/components/InView.tsx","../src/internal/hooks/useOptionsSections.ts","../src/internal/components/OptionsPanel.tsx","../src/internal/components/VirtualizedOptionsPanel.tsx","../src/internal/hooks/usePinnedOptions.ts","../src/internal/hooks/useGroupedOptions.ts","../src/internal/hooks/useProcessedOptions.ts","../src/internal/functions/buildSelectItems.ts","../src/internal/types/addNewItemTypes.ts","../src/internal/components/AddNewItemButton.tsx","../src/internal/hooks/useSelectOrchestration.ts","../src/internal/functions/syncFilterUtils.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type {\n SelectFieldOption,\n SelectFieldPageLazyResult,\n SelectFieldOffsetLazyResult,\n SelectFieldGroupLazyResult,\n SelectFieldPropsLazyPage,\n SelectFieldPropsLazyOffset,\n SelectFieldPropsLazyGroup,\n SelectFieldPropsEager,\n} from \"../../../components/SelectField/types\";\nimport { isThenable } from \"../../functions/isThenable\";\n\nexport const DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_CACHE_MAX_SIZE = 15;\n\n/**\n * Cache policy for per-search snapshots. Stays on unless `enabled` is `false`.\n */\nexport type CacheConfig = {\n /** Off only when `false`. Defaults to on. */\n enabled?: boolean;\n /** Distinct search keys kept. Exceeding this wipes the map. Defaults to `15`. */\n maxSize?: number;\n};\n\ntype CachedSearchState<TID extends string | number> = {\n options: SelectFieldOption<TID>[];\n hasMore: boolean;\n previousPage: number;\n previousOffset: number;\n previousGroup: string | number | null;\n};\n\ntype UseSelectFieldLoadingConfigLazyPage<TID extends string | number> = Pick<\n SelectFieldPropsLazyPage<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n pageSize: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyOffset<TID extends string | number> = Pick<\n SelectFieldPropsLazyOffset<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n limit: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyGroup<TID extends string | number> = Pick<\n SelectFieldPropsLazyGroup<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigEager<TID extends string | number> = Pick<\n SelectFieldPropsEager<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\n/**\n * Discriminated by `lazy`: omitted/`false` is eager; `\"page\"` needs `pageSize`;\n * `\"offset\"` needs `limit`; `\"group\"` pages by option `group`.\n */\nexport type UseSelectFieldLoadingConfig<TID extends string | number> =\n | UseSelectFieldLoadingConfigLazyPage<TID>\n | UseSelectFieldLoadingConfigLazyOffset<TID>\n | UseSelectFieldLoadingConfigLazyGroup<TID>\n | UseSelectFieldLoadingConfigEager<TID>;\n\nexport type UseSelectFieldLoadingReturn<TID extends string | number> = {\n /** Replaced on `{ initial: true }`; appended on load-more. Empty until the first load. */\n options: SelectFieldOption<TID>[];\n /** True only while an initial fetch is in flight. Sync eager loads skip this. */\n loading: boolean;\n /** True while a continuation fetch is in flight. */\n loadingMore: boolean;\n /** From the last lazy result; stays `false` in eager mode. */\n hasMore: boolean;\n /**\n * `{ initial: true }` replaces options (or restores a cache hit). Otherwise\n * appends.\n */\n loadOptions: (\n searchValue: string,\n options?: { initial?: boolean },\n ) => Promise<void>;\n /** Same as `loadOptions(searchValue, { initial: false })`. */\n loadMore: (searchValue: string) => Promise<void>;\n /** Clears options, pagination, and busy flags. Does not call `clearCache`. */\n reset: () => void;\n /** Drops cached searches. In-memory options stay. */\n clearCache: () => void;\n};\n\n/**\n * Loads SelectField options for eager or lazy (`page` / `offset` / `group`)\n * modes. Starts empty; callers must invoke `loadOptions`.\n */\nexport function useSelectFieldLoading<TID extends string | number>(\n config: UseSelectFieldLoadingConfig<TID>,\n): UseSelectFieldLoadingReturn<TID> {\n const { lazy, loadOptions: loadOptionsProp, cache: cacheConfig } = config;\n\n const cacheEnabled = cacheConfig?.enabled !== false;\n const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;\n\n const [options, setOptions] = useState<SelectFieldOption<TID>[]>([]);\n const [hasMoreToLoad, setHasMoreToLoad] = useState(false);\n const [previousGroup, setPreviousGroup] = useState<string | number | null>(\n null,\n );\n const [previousPage, setPreviousPage] = useState<number>(0);\n const [previousOffset, setPreviousOffset] = useState<number>(0);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n\n const [stateCache, setStateCache] = useState<\n Map<string, CachedSearchState<TID>>\n >(() => new Map());\n const currentSearchValueRef = useRef<string>(\"\");\n // Distinguishes \"never loaded\" empty from an empty API result so the cache\n // effect does not snapshot the first paint.\n const hasCompletedLoadRef = useRef(false);\n\n const appendOptions = useCallback((newOptions: SelectFieldOption<TID>[]) => {\n setOptions((prevOptions) => prevOptions.concat(newOptions));\n }, []);\n\n const pageSize =\n lazy === \"page\"\n ? (config as UseSelectFieldLoadingConfigLazyPage<TID>).pageSize\n : DEFAULT_PAGE_SIZE;\n const limit =\n lazy === \"offset\"\n ? (config as UseSelectFieldLoadingConfigLazyOffset<TID>).limit\n : DEFAULT_PAGE_SIZE;\n\n const restoreFromCache = useCallback((cached: CachedSearchState<TID>) => {\n setOptions(cached.options);\n setHasMoreToLoad(cached.hasMore);\n setPreviousPage(cached.previousPage);\n setPreviousOffset(cached.previousOffset);\n setPreviousGroup(cached.previousGroup);\n }, []);\n\n // Runs after batched load updates so the snapshot includes options + cursor.\n useEffect(() => {\n if (!cacheEnabled) return;\n const searchValue = currentSearchValueRef.current;\n if (!hasCompletedLoadRef.current) return;\n\n setStateCache((prev) => {\n // Not LRU: at capacity, every snapshot write wipes the map first.\n if (prev.size >= cacheMaxSize) {\n prev.clear();\n }\n\n prev.set(searchValue, {\n options,\n hasMore: hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n });\n return new Map(prev);\n });\n }, [\n cacheEnabled,\n cacheMaxSize,\n options,\n hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n ]);\n\n const loadOptions = useCallback(\n async (\n searchValue: string,\n options?: { initial?: boolean },\n ): Promise<void> => {\n const isInitial = !!options?.initial;\n\n if (isInitial && cacheEnabled) {\n const cached = stateCache.get(searchValue);\n if (cached) {\n currentSearchValueRef.current = searchValue;\n restoreFromCache(cached);\n return;\n }\n }\n\n if (isInitial) {\n currentSearchValueRef.current = searchValue;\n }\n\n const setBusy = isInitial ? setLoading : setLoadingMore;\n\n const applyEagerResult = (resolved: SelectFieldOption<TID>[]) => {\n (isInitial ? setOptions : appendOptions)(resolved);\n hasCompletedLoadRef.current = true;\n };\n\n if (!lazy) {\n const result = loadOptionsProp(searchValue);\n if (!isThenable(result)) {\n // Yield so this commit's cache effect does not snapshot empty options.\n await Promise.resolve();\n applyEagerResult(result);\n return;\n }\n\n setBusy(true);\n try {\n const awaited = await result;\n applyEagerResult(Array.isArray(awaited) ? awaited : await awaited);\n } finally {\n setBusy(false);\n }\n return;\n }\n\n setBusy(true);\n try {\n let result:\n | SelectFieldPageLazyResult<TID>\n | SelectFieldOffsetLazyResult<TID>\n | SelectFieldGroupLazyResult<TID>;\n\n if (lazy === \"page\") {\n const page = isInitial ? 0 : previousPage;\n result = await loadOptionsProp(searchValue, page, pageSize);\n setPreviousPage(isInitial ? 1 : page + 1);\n } else if (lazy === \"offset\") {\n const offset = isInitial ? 0 : previousOffset;\n result = await loadOptionsProp(searchValue, offset, limit);\n setPreviousOffset(isInitial ? limit : offset + limit);\n } else if (lazy === \"group\") {\n const group = isInitial ? null : previousGroup;\n result = await loadOptionsProp(searchValue, group);\n setPreviousGroup(\n result.options[result.options.length - 1]?.group ?? null,\n );\n } else {\n throw new Error(\n `Invalid lazy mode: ${lazy}. Expected 'page', 'offset', or 'group'.`,\n );\n }\n\n setHasMoreToLoad(result.hasMore ?? false);\n (isInitial ? setOptions : appendOptions)(result.options);\n hasCompletedLoadRef.current = true;\n } finally {\n setBusy(false);\n }\n },\n [\n lazy,\n pageSize,\n limit,\n loadOptionsProp,\n appendOptions,\n previousPage,\n previousOffset,\n previousGroup,\n cacheEnabled,\n stateCache,\n restoreFromCache,\n ],\n );\n\n const loadMore = useCallback(\n async (searchValue: string): Promise<void> => {\n await loadOptions(searchValue, { initial: false });\n },\n [loadOptions],\n );\n\n const reset = useCallback(() => {\n setOptions([]);\n setHasMoreToLoad(false);\n setPreviousGroup(null);\n setPreviousPage(0);\n setPreviousOffset(0);\n setLoading(false);\n setLoadingMore(false);\n }, []);\n\n const clearCache = useCallback(() => {\n setStateCache(new Map());\n }, []);\n\n return {\n options,\n loading,\n loadingMore,\n hasMore: hasMoreToLoad,\n loadOptions,\n loadMore,\n reset,\n clearCache,\n };\n}\n","import type { SelectItem } from \"../types/selectFieldInternalTypes\";\nimport Icon from \"../../components/Icon\";\nimport styles from \"./SelectOption.module.scss\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport cx from \"classnames\";\nimport type { CheckState } from \"../../types\";\nimport type { GetItemPropsFn } from \"../types/selectFieldInternalTypes\";\nimport { OptionCheckbox } from \"./OptionCheckbox\";\nimport { OptionContentArea } from \"./OptionContentArea\";\nimport { OptionRow, OptionRowSideContent } from \"./OptionRow\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\n\nexport type SelectOptionProps = {\n item: SelectItem;\n /** Position passed to the host's item-prop getter. */\n index: number;\n /** Whether the host currently highlights this row. */\n highlighted: boolean;\n /** Applies disabled row styling. */\n disabled: boolean;\n /** Supplies the host listbox's interaction and accessibility props. */\n getItemProps: GetItemPropsFn;\n /** Chooses a leading checkbox or trailing selected checkmark. */\n selectionType: \"single\" | \"multiple\";\n /** Selection state shown by the row indicator. */\n checked: CheckState;\n /** Adds separation styling to sticky bulk-action rows after scrolling. */\n isListScrolled?: boolean;\n};\n\n/** Renders a select item with its content and selection indicator. */\nexport const SelectOption = ({\n item,\n index,\n highlighted,\n disabled,\n getItemProps,\n selectionType,\n checked,\n isListScrolled = false,\n}: SelectOptionProps) => {\n const isBulkAction =\n item.type === \"select-all\" || item.type === \"select-filtered\";\n const isSingleSelected = selectionType === \"single\" && checked === \"checked\";\n\n return (\n <OptionRow\n key={item.id}\n data-item-index={index}\n disabled={disabled}\n {...getItemProps({\n item,\n index,\n \"data-type\": item.type,\n [ANV_PART_ATTR]: COMMON_PART.option,\n className: cx(styles[\"select-option\"], {\n [styles.highlighted]: highlighted && !isSingleSelected,\n [styles[\"single-selected\"]]: isSingleSelected && !highlighted,\n [styles[\"single-selected-highlighted\"]]:\n isSingleSelected && highlighted,\n [styles[\"bulk-action\"]]: isBulkAction,\n [styles.floating]: isBulkAction && isListScrolled,\n }),\n })}\n >\n {selectionType === \"multiple\" && (\n <OptionRowSideContent>\n <OptionCheckbox checkState={checked} />\n </OptionRowSideContent>\n )}\n <OptionContentArea\n label={item.original.label}\n content={item.original.content}\n />\n {selectionType === \"single\" && checked === \"checked\" && (\n <OptionRowSideContent>\n <Icon\n aria-hidden=\"true\"\n size=\"medium\"\n svg={Check}\n className={styles[\"checkmark\"]}\n />\n </OptionRowSideContent>\n )}\n </OptionRow>\n );\n};\n","import type { ReactNode } from \"react\";\nimport { useIntersectionObserver } from \"../hooks\";\n\ntype InViewProps = {\n children?: ReactNode;\n /** Receives each observed viewport-visibility change. */\n onVisibilityChange?: (isVisible: boolean) => void;\n /** Expands or contracts the viewport bounds using CSS margin syntax. */\n rootMargin?: string;\n};\n\n/**\n * Wraps content in an Intersection Observer target and reports viewport\n * visibility.\n */\nexport const InView = ({\n children,\n onVisibilityChange,\n rootMargin,\n}: InViewProps) => {\n const { ref } = useIntersectionObserver({\n onChange: (isIntersecting) => {\n onVisibilityChange?.(isIntersecting);\n },\n rootMargin,\n });\n\n return <div ref={ref}>{children}</div>;\n};\n","import { useMemo } from \"react\";\nimport type {\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type SectionItem = { item: SelectItem; index: number };\n\nexport type PinnedSection = {\n type: \"pinned\";\n label: string;\n items: SectionItem[];\n loading?: boolean;\n};\n\nexport type GroupSection = {\n type: \"group\";\n label: string;\n items: SectionItem[];\n};\n\nexport type FlatSection = {\n type: \"flat\";\n items: SectionItem[];\n};\n\nexport type Section = PinnedSection | GroupSection | FlatSection;\n\nexport type VirtualRow =\n | { type: \"item\"; item: SelectItem; index: number }\n | { type: \"header\"; label: string; sectionIndex: number }\n | { type: \"divider\"; sectionIndex: number }\n | { type: \"load-more\" };\n\n/**\n * Partitions a flat item list into indexed pinned, grouped, and unsectioned\n * ranges.\n */\nexport const useOptionsSections = (\n items: SelectItem[],\n sectionsMeta: SectionMeta[],\n): Section[] => {\n return useMemo((): Section[] => {\n if (sectionsMeta.length === 0) {\n return [\n {\n type: \"flat\",\n items: items.map((item, index) => ({ item, index })),\n },\n ];\n }\n\n const result: Section[] = [];\n\n const firstSectionStartIndex = Math.min(\n ...sectionsMeta.map((s) => s.startIndex),\n );\n\n if (firstSectionStartIndex > 0) {\n const flatItems: SectionItem[] = [];\n for (let i = 0; i < firstSectionStartIndex; i++) {\n if (items[i]) {\n flatItems.push({ item: items[i], index: i });\n }\n }\n if (flatItems.length > 0) {\n result.push({ type: \"flat\", items: flatItems });\n }\n }\n\n sectionsMeta.forEach((meta) => {\n const sectionItems: SectionItem[] = [];\n for (let i = meta.startIndex; i < meta.endIndex; i++) {\n if (items[i]) {\n sectionItems.push({ item: items[i], index: i });\n }\n }\n if (meta.type === \"pinned\") {\n if (sectionItems.length > 0 || meta.loading) {\n result.push({\n type: \"pinned\",\n label: meta.label,\n items: sectionItems,\n loading: meta.loading,\n });\n }\n } else if (sectionItems.length > 0) {\n result.push({\n type: \"group\",\n label: meta.label,\n items: sectionItems,\n });\n }\n });\n\n const lastSectionIndex =\n sectionsMeta.length > 0\n ? Math.max(...sectionsMeta.map((s) => s.endIndex))\n : 0;\n\n if (lastSectionIndex < items.length) {\n const flatItems: SectionItem[] = [];\n for (let i = lastSectionIndex; i < items.length; i++) {\n flatItems.push({ item: items[i], index: i });\n }\n if (flatItems.length > 0) {\n result.push({ type: \"flat\", items: flatItems });\n }\n }\n\n return result;\n }, [items, sectionsMeta]);\n};\n\n/**\n * Builds virtual rows and index metadata, marking bulk-action rows as sticky\n * and appending a load-more row when requested.\n */\nexport function flattenSectionsToVirtualRows(\n sections: Section[],\n hasMore: boolean,\n): {\n virtualRows: VirtualRow[];\n downshiftIndexToVirtualRowIndex: Record<number, number>;\n stickyIndices: number[];\n} {\n const virtualRows: VirtualRow[] = [];\n const downshiftIndexToVirtualRowIndex: Record<number, number> = {};\n const stickyIndices: number[] = [];\n\n sections.forEach((section, sectionIndex) => {\n const isLastSection = sectionIndex === sections.length - 1;\n\n if (section.type === \"pinned\" || section.type === \"group\") {\n virtualRows.push({\n type: \"header\",\n label: section.label,\n sectionIndex,\n });\n\n section.items.forEach(({ item, index }) => {\n downshiftIndexToVirtualRowIndex[index] = virtualRows.length;\n virtualRows.push({ type: \"item\", item, index });\n });\n\n if (!isLastSection) {\n virtualRows.push({ type: \"divider\", sectionIndex });\n }\n } else {\n section.items.forEach(({ item, index }) => {\n const isBulkAction =\n item.type === \"select-all\" || item.type === \"select-filtered\";\n if (isBulkAction) {\n stickyIndices.push(virtualRows.length);\n }\n downshiftIndexToVirtualRowIndex[index] = virtualRows.length;\n virtualRows.push({ type: \"item\", item, index });\n });\n }\n });\n\n if (hasMore) {\n virtualRows.push({ type: \"load-more\" });\n }\n\n return { virtualRows, downshiftIndexToVirtualRowIndex, stickyIndices };\n}\n","import type { SelectItem } from \"../types/selectFieldInternalTypes\";\nimport Spinner from \"../../components/Spinner\";\nimport Button from \"../../components/Button\";\nimport styles from \"./SelectOptions.module.scss\";\nimport cx from \"classnames\";\nimport {\n type CSSProperties,\n forwardRef,\n type ReactNode,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { SelectOption } from \"./SelectOption\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\nimport { InView } from \"./InView\";\nimport { Text } from \"../../components/Text\";\nimport { SrOnly } from \"../../components\";\nimport Divider from \"../../components/Divider\";\nimport type { CheckState } from \"../../types\";\nimport type {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n} from \"../types/selectFieldInternalTypes\";\nimport { useMergeRefs } from \"../../hooks/useMergeRefs\";\nimport { useOptionsSections } from \"../hooks/useOptionsSections\";\n\nexport type OptionsPanelHandle = {\n scrollToTop: () => void;\n /** Scrolls the row at `index` into view. `<= 0` shows a leading group header. */\n scrollToIndex: (index: number) => void;\n};\n\nexport type OptionsPanelProps = {\n /** When false, option rows stay unmounted inside the menu scroller. */\n isOpen: boolean;\n /** Flattened option, pinned/group, and bulk-action rows. */\n items: SelectItem[];\n /** Downshift getter for the menu scroller. */\n getMenuProps: GetMenuPropsFn;\n /** Downshift getter for each option row. */\n getItemProps: GetItemPropsFn;\n /** Host highlight index into `items`. */\n highlightedIndex: number;\n /** Selection indicator shown on each row. */\n getCheckedState: (item: SelectItem) => CheckState;\n /** Leading checkbox vs trailing selected checkmark. */\n selectionType: \"single\" | \"multiple\";\n /** When true, shows the load-more control. */\n hasMore: boolean;\n /** Fetches the next page of options. */\n onLoadMore: () => void;\n /** Replaces the list with a spinner while the current page loads. */\n loading: boolean;\n /** Spinner in the load-more slot. */\n loadingMore: boolean;\n /** Skips automatic next-page fetch; the Load more button remains. */\n disableAutoLoadMore?: boolean;\n /** Disables every row, in addition to per-item `disabled`. */\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n /** Pinned and group ranges over `items`. */\n sectionsMeta?: SectionMeta[];\n};\n\n/** Non-virtualized option list scroller. */\nexport const OptionsPanel = forwardRef<OptionsPanelHandle, OptionsPanelProps>(\n (\n {\n isOpen,\n items,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n getCheckedState,\n selectionType,\n hasMore,\n onLoadMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n disabled,\n className,\n style,\n sectionsMeta = [],\n },\n ref,\n ) => {\n const baseId = useId();\n const scrollSentinelRef = useRef<HTMLDivElement>(null);\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [isScrolled, setIsScrolled] = useState(false);\n\n useImperativeHandle(ref, () => ({\n scrollToTop: () => {\n if (scrollerRef.current) {\n scrollerRef.current.scrollTop = 0;\n }\n },\n scrollToIndex: (index: number) => {\n if (!scrollerRef.current) return;\n if (index <= 0) {\n // Nearest-item scroll would clip a leading group header.\n scrollerRef.current.scrollTop = 0;\n return;\n }\n const item = scrollerRef.current.querySelector(\n `[data-item-index=\"${index}\"]`,\n );\n if (item) {\n item.scrollIntoView({ block: \"nearest\" });\n }\n },\n }));\n\n // Sentinel leaving the scroller means sticky bulk rows should show a shadow.\n useEffect(() => {\n if (!isOpen) {\n setIsScrolled(false);\n return;\n }\n if (!scrollSentinelRef.current) return;\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n setIsScrolled(!entry.isIntersecting);\n });\n },\n { threshold: 0, root: scrollerRef.current },\n );\n observer.observe(scrollSentinelRef.current);\n return () => observer.disconnect();\n }, [isOpen]);\n\n // Keep the full-panel spinner so an empty pinned placeholder does not collapse the list.\n const anyPinnedLoading = sectionsMeta.some(\n (s) => s.type === \"pinned\" && s.loading,\n );\n\n const handleLoaderVisibilityChange = (visible: boolean) => {\n if (visible && !disableAutoLoadMore) {\n onLoadMore();\n }\n };\n\n const sections = useOptionsSections(items, sectionsMeta);\n\n const renderItem = (item: SelectItem, index: number): ReactNode => (\n <SelectOption\n key={item.id}\n item={item}\n index={index}\n getItemProps={getItemProps}\n selectionType={selectionType}\n checked={getCheckedState(item)}\n highlighted={highlightedIndex === index}\n disabled={(disabled || item.disabled) ?? false}\n isListScrolled={isScrolled}\n />\n );\n\n const renderSections = (): ReactNode[] => {\n const result: ReactNode[] = [];\n\n sections.forEach((section, sectionIndex) => {\n const isLastSection = sectionIndex === sections.length - 1;\n\n if (section.type === \"pinned\" || section.type === \"group\") {\n const labelId = `${baseId}-section-${sectionIndex}`;\n\n result.push(\n <div\n key={`section-${sectionIndex}`}\n role=\"group\"\n aria-labelledby={labelId}\n className={styles[\"pinned-section\"]}\n >\n <span id={labelId} className={styles[\"pinned-section-header\"]}>\n <Text variant=\"eyebrow\">{section.label}</Text>\n </span>\n <div className={styles[\"pinned-section-list\"]}>\n {section.items.map(({ item, index }) =>\n renderItem(item, index),\n )}\n </div>\n </div>,\n );\n if (!isLastSection) {\n result.push(\n // Visual only; role=group and aria-labelledby already name the sections.\n <div\n key={`divider-${sectionIndex}`}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={styles[\"divider\"]}\n >\n <Divider />\n </div>,\n );\n }\n } else {\n section.items.forEach(({ item, index }) => {\n result.push(renderItem(item, index));\n });\n }\n });\n\n return result;\n };\n\n const menuProps = getMenuProps({\n className: cx(styles[\"scroller\"], className),\n style,\n [ANV_PART_ATTR]: COMMON_PART.menu,\n });\n\n const menuRef = useMergeRefs([menuProps.ref, scrollerRef]);\n\n return (\n <div {...menuProps} ref={menuRef}>\n <div className={styles[\"select-field-list\"]}>\n {isOpen && (\n <div\n ref={scrollSentinelRef}\n className={styles[\"scroll-sentinel\"]}\n role=\"presentation\"\n aria-hidden=\"true\"\n />\n )}\n {isOpen && (\n <>\n {loading || anyPinnedLoading ? (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Spinner size=\"medium\" />\n </div>\n ) : items.length > 0 ? (\n renderSections()\n ) : (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Text subdued size=\"small\">\n No match found\n </Text>\n </div>\n )}\n </>\n )}\n {loadingMore ? (\n <div role=\"presentation\" className={styles[\"load-more\"]}>\n <Spinner size=\"small\" />\n <SrOnly>Loading more...</SrOnly>\n </div>\n ) : hasMore && !loading ? (\n <div role=\"presentation\">\n <InView\n onVisibilityChange={handleLoaderVisibilityChange}\n rootMargin=\"0px 0px -100px 0px\"\n >\n <div className={styles[\"load-more\"]}>\n <Button\n appearance=\"secondary\"\n size=\"small\"\n onClick={onLoadMore}\n {...{ [ANV_PART_ATTR]: COMMON_PART.loadMoreButton }}\n >\n Load more\n </Button>\n </div>\n </InView>\n </div>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nOptionsPanel.displayName = \"OptionsPanel\";\n","import Spinner from \"../../components/Spinner\";\nimport Button from \"../../components/Button\";\nimport styles from \"./SelectOptions.module.scss\";\nimport cx from \"classnames\";\nimport {\n forwardRef,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { SelectOption } from \"./SelectOption\";\nimport { Text } from \"../../components/Text\";\nimport { SrOnly } from \"../../components\";\nimport Divider from \"../../components/Divider\";\nimport { useMergeRefs } from \"../../hooks/useMergeRefs\";\nimport {\n useOptionsSections,\n flattenSectionsToVirtualRows,\n type VirtualRow,\n} from \"../hooks/useOptionsSections\";\nimport { defaultRangeExtractor, useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { Range } from \"@tanstack/react-virtual\";\nimport type { OptionsPanelProps, OptionsPanelHandle } from \"./OptionsPanel\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\n\nconst EST_PADDING_BLOCK = 16; // $size-2 * 2\nconst EST_LINE_HEIGHT = 18; // $size-4 + $size-half\nconst EST_CHIP_ROW_HEIGHT = 28; // $size-1 + chip\nconst EST_SIDE_CONTENT_HEIGHT = 40; // $size-10\nconst EST_HEADER_HEIGHT = 32;\nconst EST_DIVIDER_HEIGHT = 17;\nconst EST_LOAD_MORE_HEIGHT = 40;\nconst EST_BASE_ITEM_HEIGHT = EST_PADDING_BLOCK + EST_LINE_HEIGHT;\n\nfunction estimateRowHeight(row: VirtualRow): number {\n if (row.type === \"header\") return EST_HEADER_HEIGHT;\n if (row.type === \"divider\") return EST_DIVIDER_HEIGHT;\n if (row.type === \"load-more\") return EST_LOAD_MORE_HEIGHT;\n\n const content = row.item.original.content;\n if (!content) return EST_BASE_ITEM_HEIGHT;\n\n let contentHeight = EST_LINE_HEIGHT;\n if (content.description) contentHeight += EST_LINE_HEIGHT;\n if (content.chips?.length) contentHeight += EST_CHIP_ROW_HEIGHT;\n if (content.avatar || content.icon)\n contentHeight = Math.max(contentHeight, EST_SIDE_CONTENT_HEIGHT);\n\n return EST_PADDING_BLOCK + contentHeight;\n}\n\n/** Virtualized {@link OptionsPanel} scroller. */\nexport const VirtualizedOptionsPanel = forwardRef<\n OptionsPanelHandle,\n OptionsPanelProps\n>(\n (\n {\n isOpen,\n items,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n getCheckedState,\n selectionType,\n hasMore,\n onLoadMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n disabled,\n className,\n style,\n sectionsMeta = [],\n },\n ref,\n ) => {\n const baseId = useId();\n const scrollSentinelRef = useRef<HTMLDivElement>(null);\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [isScrolled, setIsScrolled] = useState(false);\n\n // Sentinel leaving the scroller means sticky bulk rows should show a shadow.\n useEffect(() => {\n if (!isOpen) {\n setIsScrolled(false);\n return;\n }\n if (!scrollSentinelRef.current) return;\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n setIsScrolled(!entry.isIntersecting);\n });\n },\n { threshold: 0, root: scrollerRef.current },\n );\n observer.observe(scrollSentinelRef.current);\n return () => observer.disconnect();\n }, [isOpen]);\n\n // Keep the full-panel spinner so an empty pinned placeholder does not collapse the list.\n const anyPinnedLoading = sectionsMeta.some(\n (s) => s.type === \"pinned\" && s.loading,\n );\n\n const sections = useOptionsSections(items, sectionsMeta);\n\n const { virtualRows, downshiftIndexToVirtualRowIndex, stickyIndices } =\n useMemo(\n () => flattenSectionsToVirtualRows(sections, hasMore),\n [sections, hasMore],\n );\n\n const stickyHeightRef = useRef(EST_BASE_ITEM_HEIGHT);\n\n // Keep the stuck header in the measured range so it is not virtualized away.\n const rangeExtractor = useCallback(\n (range: Range) => {\n if (stickyIndices.length === 0) {\n return defaultRangeExtractor(range);\n }\n const activeStickyIndex =\n [...stickyIndices]\n .reverse()\n .find((index) => range.startIndex >= index) ?? 0;\n\n const next = new Set([\n activeStickyIndex,\n ...defaultRangeExtractor(range),\n ]);\n\n return [...next].sort((a, b) => a - b);\n },\n [stickyIndices],\n );\n\n const virtualizer = useVirtualizer({\n count: virtualRows.length,\n getScrollElement: () => scrollerRef.current,\n estimateSize: (index) => estimateRowHeight(virtualRows[index]),\n overscan: 5,\n rangeExtractor,\n // Keep scrolled-to rows from landing under the stuck header.\n scrollPaddingStart:\n stickyIndices.length > 0 ? stickyHeightRef.current : 0,\n enabled: isOpen,\n getItemKey: (index) => {\n const row = virtualRows[index];\n if (row.type === \"item\") return row.item.id;\n if (row.type === \"header\") return `header-${row.sectionIndex}`;\n if (row.type === \"divider\") return `divider-${row.sectionIndex}`;\n return \"load-more\";\n },\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n if (stickyIndices.length > 0) {\n const stickyItem = virtualItems.find((vi) =>\n stickyIndices.includes(vi.index),\n );\n if (stickyItem) {\n stickyHeightRef.current = stickyItem.size;\n }\n }\n\n const downshiftMapRef = useRef(downshiftIndexToVirtualRowIndex);\n downshiftMapRef.current = downshiftIndexToVirtualRowIndex;\n\n const virtualizerRef = useRef(virtualizer);\n virtualizerRef.current = virtualizer;\n\n useImperativeHandle(ref, () => ({\n scrollToTop: () => {\n if (virtualizerRef.current) {\n virtualizerRef.current.scrollToOffset(0);\n }\n },\n scrollToIndex: (index: number) => {\n if (index <= 0) {\n // Nearest-item scroll would clip a leading group header.\n virtualizerRef.current.scrollToOffset(0);\n return;\n }\n const virtualRowIndex = downshiftMapRef.current[index];\n if (virtualRowIndex != null) {\n virtualizerRef.current.scrollToIndex(virtualRowIndex, {\n align: \"auto\",\n });\n }\n },\n }));\n\n const onLoadMoreRef = useRef(onLoadMore);\n onLoadMoreRef.current = onLoadMore;\n\n // Last rendered virtual row standing in for the non-virtual InView sentinel.\n useEffect(() => {\n if (!hasMore || loadingMore || disableAutoLoadMore) return;\n const lastItem = virtualItems[virtualItems.length - 1];\n if (!lastItem) return;\n if (lastItem.index >= virtualRows.length - 1) {\n onLoadMoreRef.current();\n }\n }, [\n hasMore,\n loadingMore,\n disableAutoLoadMore,\n virtualItems,\n virtualRows.length,\n ]);\n\n const isSticky = useCallback(\n (index: number) => stickyIndices.includes(index),\n [stickyIndices],\n );\n\n const renderVirtualRow = (row: VirtualRow): ReactNode => {\n if (row.type === \"item\") {\n return (\n <SelectOption\n item={row.item}\n index={row.index}\n getItemProps={getItemProps}\n selectionType={selectionType}\n checked={getCheckedState(row.item)}\n highlighted={highlightedIndex === row.index}\n disabled={(disabled || row.item.disabled) ?? false}\n isListScrolled={isScrolled}\n />\n );\n }\n\n if (row.type === \"header\") {\n const labelId = `${baseId}-section-${row.sectionIndex}`;\n return (\n // Flattened virtual rows cannot wrap a labelled group.\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={styles[\"pinned-section-header\"]}\n >\n <span id={labelId}>\n <Text variant=\"eyebrow\">{row.label}</Text>\n </span>\n </div>\n );\n }\n\n if (row.type === \"divider\") {\n return (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={styles[\"divider\"]}\n >\n <Divider />\n </div>\n );\n }\n\n if (row.type === \"load-more\") {\n if (loadingMore) {\n return (\n <div role=\"presentation\" className={styles[\"load-more\"]}>\n <Spinner size=\"small\" />\n <SrOnly>Loading more...</SrOnly>\n </div>\n );\n }\n return (\n <div role=\"presentation\">\n <div className={styles[\"load-more\"]}>\n <Button\n appearance=\"secondary\"\n size=\"small\"\n onClick={() => onLoadMoreRef.current()}\n {...{ [ANV_PART_ATTR]: COMMON_PART.loadMoreButton }}\n >\n Load more\n </Button>\n </div>\n </div>\n );\n }\n\n return null;\n };\n\n const menuProps = getMenuProps({\n className: cx(styles[\"scroller\"], className),\n style,\n [ANV_PART_ATTR]: COMMON_PART.menu,\n });\n\n const menuRef = useMergeRefs([menuProps.ref, scrollerRef]);\n\n return (\n <div {...menuProps} ref={menuRef}>\n <div className={styles[\"select-field-list\"]}>\n {isOpen && (\n <div\n ref={scrollSentinelRef}\n className={styles[\"scroll-sentinel\"]}\n role=\"presentation\"\n aria-hidden=\"true\"\n />\n )}\n {isOpen && (\n <>\n {loading || anyPinnedLoading ? (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Spinner size=\"medium\" />\n </div>\n ) : items.length > 0 ? (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{\n height: virtualizer.getTotalSize(),\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {virtualItems.map((virtualItem) => {\n const row = virtualRows[virtualItem.index];\n const sticky = isSticky(virtualItem.index);\n\n return (\n <div\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n style={\n sticky\n ? {\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n }\n : {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualItem.start}px)`,\n }\n }\n >\n {renderVirtualRow(row)}\n </div>\n );\n })}\n </div>\n ) : (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Text subdued size=\"small\">\n No match found\n </Text>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n },\n);\n\nVirtualizedOptionsPanel.displayName = \"VirtualizedOptionsPanel\";\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n SelectFieldOption,\n SelectFieldPinnedOptions,\n SelectFieldPinnedOptionsSection,\n} from \"../../components/SelectField/types\";\n\nconst DEFAULT_CACHE_SIZE = 15;\nconst STATIC_CACHE_KEY = \"__static__\";\n\n/** A pinned section normalized for item building. */\nexport type NormalizedPinnedSection<TID extends string | number> = {\n label: string;\n options: SelectFieldOption<TID>[];\n loading?: boolean;\n};\n\ntype UsePinnedOptionsResult<TID extends string | number> = {\n pinnedSections: NormalizedPinnedSection<TID>[];\n};\n\ntype SectionConfig<TID extends string | number> = {\n label: string;\n isDynamic: boolean;\n searchReactive: boolean;\n cacheSize: number;\n staticOptions: SelectFieldOption<TID>[] | undefined;\n loader:\n | ((\n sv: string,\n ) => SelectFieldOption<TID>[] | Promise<SelectFieldOption<TID>[]>)\n | undefined;\n};\n\n/**\n * Writes a cache entry and evicts the least-recently written entries over the\n * limit.\n */\nfunction cacheSet(\n sectionCache: Map<string, SelectFieldOption[]>,\n key: string,\n value: SelectFieldOption[],\n maxSize: number,\n): void {\n // Re-insert so this key is newest; Map.set preserves its existing order.\n if (sectionCache.has(key)) {\n sectionCache.delete(key);\n }\n sectionCache.set(key, value);\n while (sectionCache.size > maxSize) {\n const oldest = sectionCache.keys().next().value;\n if (oldest !== undefined) {\n sectionCache.delete(oldest);\n }\n }\n}\n\n/**\n * Normalizes static and loaded pinned sections, caching dynamic results by\n * section and search value. Non-reactive loaders run once with an empty search;\n * unresolved sections are returned empty with `loading: true`.\n */\nexport function usePinnedOptions<TID extends string | number>(\n pinned: SelectFieldPinnedOptions<TID> | undefined,\n searchValue: string,\n): UsePinnedOptionsResult<TID> {\n const [dynamicResults, setDynamicResults] = useState<\n Record<number, SelectFieldOption<TID>[]>\n >({});\n const [loadingSet, setLoadingSet] = useState<Set<number>>(new Set());\n\n const latestSearchValueRef = useRef(searchValue);\n latestSearchValueRef.current = searchValue;\n\n const cacheRef = useRef<Map<number, Map<string, SelectFieldOption<TID>[]>>>(\n new Map(),\n );\n\n // Prevent duplicate non-reactive loads while the first request is pending.\n const nonReactiveTriggeredRef = useRef<Set<number>>(new Set());\n\n const sections = useMemo((): SelectFieldPinnedOptionsSection<TID>[] => {\n if (!pinned) return [];\n return Array.isArray(pinned) ? pinned : [pinned];\n }, [pinned]);\n\n const sectionConfig = useMemo((): SectionConfig<TID>[] => {\n return sections.map((section) => {\n const isDynamic = typeof section.options === \"function\";\n return {\n label: section.label,\n isDynamic,\n searchReactive: section.searchReactive ?? true,\n cacheSize: section.cacheSize ?? DEFAULT_CACHE_SIZE,\n staticOptions: isDynamic\n ? undefined\n : (section.options as SelectFieldOption<TID>[]),\n loader: isDynamic\n ? (section.options as (\n sv: string,\n ) => SelectFieldOption<TID>[] | Promise<SelectFieldOption<TID>[]>)\n : undefined,\n };\n });\n }, [sections]);\n\n // Reset before the loader effect can read the previous configuration's cache.\n useEffect(() => {\n cacheRef.current = new Map();\n nonReactiveTriggeredRef.current = new Set();\n }, [sectionConfig]);\n\n const getSectionCache = useCallback(\n (index: number): Map<string, SelectFieldOption<TID>[]> => {\n let sectionCache = cacheRef.current.get(index);\n if (!sectionCache) {\n sectionCache = new Map();\n cacheRef.current.set(index, sectionCache);\n }\n return sectionCache;\n },\n [],\n );\n\n const loadSection = useCallback(\n (config: SectionConfig<TID>, index: number, loaderArg: string) => {\n const cacheKey = config.searchReactive ? loaderArg : STATIC_CACHE_KEY;\n\n const handleResult = (options: SelectFieldOption<TID>[]) => {\n // Reactive results expire when search moves on; non-reactive always apply.\n if (\n !config.searchReactive ||\n latestSearchValueRef.current === loaderArg\n ) {\n const sectionCache = getSectionCache(index);\n cacheSet(sectionCache, cacheKey, options, config.cacheSize);\n setDynamicResults((prev) => ({ ...prev, [index]: options }));\n setLoadingSet((prev) => {\n const next = new Set(prev);\n next.delete(index);\n return next;\n });\n }\n };\n\n const handleError = (error: unknown) => {\n console.error(\"Failed to load pinned options:\", error);\n if (\n !config.searchReactive ||\n latestSearchValueRef.current === loaderArg\n ) {\n setDynamicResults((prev) => ({ ...prev, [index]: [] }));\n setLoadingSet((prev) => {\n const next = new Set(prev);\n next.delete(index);\n return next;\n });\n }\n };\n\n try {\n Promise.resolve(config.loader!(loaderArg))\n .then(handleResult)\n .catch(handleError);\n } catch (error) {\n handleError(error);\n }\n },\n [getSectionCache],\n );\n\n useEffect(() => {\n const dynamicEntries = sectionConfig\n .map((config, index) => ({ config, index }))\n .filter(({ config }) => config.isDynamic);\n\n if (dynamicEntries.length === 0) return;\n\n const toLoad: { config: SectionConfig<TID>; index: number }[] = [];\n const preResolved: Record<number, SelectFieldOption<TID>[]> = {};\n\n dynamicEntries.forEach(({ config, index }) => {\n const sectionCache = getSectionCache(index);\n\n if (config.searchReactive) {\n const cached = sectionCache.get(searchValue);\n if (cached) {\n preResolved[index] = cached;\n } else {\n toLoad.push({ config, index });\n }\n } else {\n const cached = sectionCache.get(STATIC_CACHE_KEY);\n if (cached) {\n preResolved[index] = cached;\n } else if (!nonReactiveTriggeredRef.current.has(index)) {\n nonReactiveTriggeredRef.current.add(index);\n toLoad.push({ config, index });\n }\n // Omitting an in-flight section preserves the empty, loading fallback.\n }\n });\n\n if (toLoad.length === 0) {\n setDynamicResults(preResolved);\n setLoadingSet(new Set());\n return;\n }\n\n const loadingIndices = toLoad.map(({ index }) => index);\n setDynamicResults(preResolved);\n setLoadingSet(new Set(loadingIndices));\n\n toLoad.forEach(({ config, index }) => {\n const loaderArg = config.searchReactive ? searchValue : \"\";\n loadSection(config, index, loaderArg);\n });\n }, [sectionConfig, searchValue, loadSection, getSectionCache]);\n\n const pinnedSections = useMemo((): NormalizedPinnedSection<TID>[] => {\n return sectionConfig.map((config, index) => {\n if (!config.isDynamic) {\n return { label: config.label, options: config.staticOptions! };\n }\n if (!loadingSet.has(index) && index in dynamicResults) {\n return {\n label: config.label,\n options: dynamicResults[index],\n };\n }\n return { label: config.label, options: [], loading: true };\n });\n }, [sectionConfig, dynamicResults, loadingSet]);\n\n return { pinnedSections };\n}\n","import { useMemo } from \"react\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n} from \"../../components/SelectField/types\";\nimport type { SelectItem } from \"../types/selectFieldInternalTypes\";\n\n/** A group label and its options, normalized for section rendering. */\nexport type NormalizedGroupSection<TID extends string | number> = {\n label: string;\n options: SelectFieldOption<TID>[];\n};\n\ntype UseGroupedOptionsResult<TID extends string | number> = {\n groupedItems: SelectItem<TID>[];\n ungroupedItems: SelectItem<TID>[];\n groupSections: NormalizedGroupSection<TID>[];\n};\n\n/**\n * Partitions options into Downshift items and group sections, preserving\n * first-seen group order.\n */\nexport function useGroupedOptions<TID extends string | number>(\n options: SelectFieldOption<TID>[],\n groupToString?: (groupValue: SelectFieldGroupByValue) => string,\n): UseGroupedOptionsResult<TID> {\n return useMemo(() => {\n const groupedItems: SelectItem<TID>[] = [];\n const ungroupedItems: SelectItem<TID>[] = [];\n const groupSections: NormalizedGroupSection<TID>[] = [];\n\n const groupMap = new Map<\n SelectFieldGroupByValue,\n { label: string; options: SelectFieldOption<TID>[] }\n >();\n\n options.forEach((option) => {\n if (option.group !== undefined) {\n const groupValue = option.group;\n\n if (!groupMap.has(groupValue)) {\n const label = groupToString\n ? groupToString(groupValue)\n : String(groupValue);\n groupMap.set(groupValue, { label, options: [] });\n }\n\n groupMap.get(groupValue)!.options.push(option);\n\n groupedItems.push({\n id: option.id,\n type: \"grouped-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n } else {\n ungroupedItems.push({\n id: option.id,\n type: \"option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n }\n });\n\n groupMap.forEach(({ label, options: groupOptions }) => {\n groupSections.push({ label, options: groupOptions });\n });\n\n return { groupedItems, ungroupedItems, groupSections };\n }, [options, groupToString]);\n}\n\n/**\n * Returns group sections sorted by each section's first option group value.\n */\nexport function sortGroupSections<TID extends string | number>(\n sections: NormalizedGroupSection<TID>[],\n groupSorter: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number,\n): NormalizedGroupSection<TID>[] {\n return [...sections].sort((a, b) => {\n const groupA = a.options[0]?.group;\n const groupB = b.options[0]?.group;\n if (groupA === undefined || groupB === undefined) return 0;\n return groupSorter(groupA, groupB);\n });\n}\n","import { useMemo } from \"react\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../../components/SelectField/types\";\nimport { usePinnedOptions } from \"./usePinnedOptions\";\nimport { sortGroupSections, useGroupedOptions } from \"./useGroupedOptions\";\n\ntype UseProcessedOptionsParams<TID extends string | number> = {\n options: SelectFieldOption<TID>[];\n pinned?: SelectFieldPinnedOptions<TID>;\n searchValue: string;\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n};\n\n/**\n * Combines pinned-option loading with grouped and ungrouped option\n * normalization, then optionally sorts the groups.\n */\nexport const useProcessedOptions = <TID extends string | number>({\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n}: UseProcessedOptionsParams<TID>) => {\n const { pinnedSections } = usePinnedOptions(pinned, searchValue);\n\n const { ungroupedItems, groupSections: rawGroupSections } = useGroupedOptions(\n options,\n groupToString,\n );\n\n const groupSections = useMemo(() => {\n if (groupSorter && rawGroupSections.length > 0) {\n return sortGroupSections(rawGroupSections, groupSorter);\n }\n return rawGroupSections;\n }, [rawGroupSections, groupSorter]);\n\n return { pinnedSections, ungroupedItems, groupSections };\n};\n","import type { SelectFieldOption } from \"../../components/SelectField/types\";\nimport type {\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\nimport type { NormalizedPinnedSection } from \"../hooks/usePinnedOptions\";\nimport type { NormalizedGroupSection } from \"../hooks/useGroupedOptions\";\n\nexport function toSelectItem<TID extends string | number>(\n option: SelectFieldOption<TID>,\n): SelectItem<TID> {\n return {\n id: option.id,\n type: \"option\",\n disabled: option.disabled ?? false,\n original: option,\n };\n}\n\ntype BuildSelectItemsParams<TID extends string | number> = {\n prefixItems?: SelectItem[];\n pinnedSections: NormalizedPinnedSection<TID>[];\n groupSections: NormalizedGroupSection<TID>[];\n ungroupedItems: SelectItem<TID>[];\n};\n\n/**\n * Flattens normalized select sections into render items and indexed section\n * metadata.\n */\nexport function buildSelectItems<TID extends string | number>({\n prefixItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n}: BuildSelectItemsParams<TID>): {\n items: SelectItem<TID>[];\n sectionsMeta: SectionMeta[];\n} {\n const items: SelectItem<TID>[] = [];\n const meta: SectionMeta[] = [];\n\n if (prefixItems) {\n items.push(...(prefixItems as SelectItem<TID>[]));\n }\n\n pinnedSections.forEach((section) => {\n const startIndex = items.length;\n\n section.options.forEach((option) => {\n items.push({\n id: option.id + \"-pinned\",\n type: \"pinned-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n });\n\n const endIndex = items.length;\n\n if (endIndex > startIndex || section.loading) {\n meta.push({\n type: \"pinned\",\n label: section.label,\n startIndex,\n endIndex,\n loading: section.loading,\n });\n }\n });\n\n groupSections.forEach((section) => {\n const startIndex = items.length;\n\n section.options.forEach((option) => {\n items.push({\n id: option.id,\n type: \"grouped-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n });\n\n const endIndex = items.length;\n\n if (endIndex > startIndex) {\n meta.push({\n type: \"group\",\n label: section.label,\n startIndex,\n endIndex,\n });\n }\n });\n\n items.push(...ungroupedItems);\n\n return { items, sectionsMeta: meta };\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Shared \"Add new item\" affordance. The button mounts when `onAddNewItem` is\n * set and {@link resolveAddItemLabel} returns a node.\n */\nexport type AddNewItemProps = {\n /**\n * Button label. A callback receives the current search text and may return\n * `null`/`undefined` to hide the button. Omitted static labels fall back to\n * `\"Add new item\"`.\n */\n addItemLabel?: ReactNode | ((searchText: string) => ReactNode);\n /**\n * Called with the current search text after the host menu closes. Consumers\n * own overlay, list, and selection updates.\n */\n onAddNewItem?: (searchText: string) => void;\n};\n\n/** Resolves the add-new button label for the current search text. */\nexport function resolveAddItemLabel(\n addItemLabel: AddNewItemProps[\"addItemLabel\"],\n searchText: string,\n): ReactNode | null {\n if (typeof addItemLabel === \"function\") {\n return addItemLabel(searchText) ?? null;\n }\n return addItemLabel ?? \"Add new item\";\n}\n\n/**\n * Whether the add-new button should mount. Hosts use this so an empty footer\n * (and its divider) is not rendered when a label callback hides the button.\n */\nexport function shouldShowAddNewItem(\n onAddNewItem: AddNewItemProps[\"onAddNewItem\"],\n addItemLabel: AddNewItemProps[\"addItemLabel\"],\n searchText: string,\n): boolean {\n return (\n onAddNewItem != null &&\n resolveAddItemLabel(addItemLabel, searchText) != null\n );\n}\n","import Button from \"../../components/Button\";\nimport Add from \"@servicetitan/hammer-icon/mdi/round/add.svg\";\nimport {\n type AddNewItemProps,\n resolveAddItemLabel,\n} from \"../types/addNewItemTypes\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\n\nexport type AddNewItemButtonProps = AddNewItemProps & {\n /** Passed to the label callback and add-item handler. */\n searchText: string;\n /** Closes the host menu before the add-item handler runs. */\n onCloseMenu?: () => void;\n};\n\n/**\n * Add-new affordance for select menus. It remains unmounted without a handler\n * or when the label callback returns `null`/`undefined`.\n */\nexport const AddNewItemButton = ({\n searchText,\n addItemLabel,\n onAddNewItem,\n onCloseMenu,\n}: AddNewItemButtonProps) => {\n if (!onAddNewItem) return null;\n\n const resolvedLabel = resolveAddItemLabel(addItemLabel, searchText);\n if (resolvedLabel == null) return null;\n\n return (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: Add }}\n // Safari does not focus buttons on mousedown; without preventDefault the\n // popover's focusout listener fires with relatedTarget=null and closes\n // the menu before the click handler runs.\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n onCloseMenu?.();\n onAddNewItem(searchText);\n }}\n style={{ width: \"100%\" }}\n {...{ [ANV_PART_ATTR]: COMMON_PART.addNewItemButton }}\n >\n {resolvedLabel}\n </Button>\n );\n};\n\nAddNewItemButton.displayName = \"AddNewItemButton\";\n","import {\n type ForwardedRef,\n useImperativeHandle,\n useMemo,\n useState,\n} from \"react\";\nimport {\n useSelectFieldLoading,\n DEFAULT_PAGE_SIZE,\n} from \"./useSelectFieldLoading\";\nimport { useAdaptiveView } from \"../../beta/hooks/useAdaptiveView\";\n\nexport type UseSelectOrchestrationConfig = {\n lazy: false | \"page\" | \"offset\" | \"group\" | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n loadOptions: any;\n cache?: { enabled?: boolean; maxSize?: number };\n lazyOptions?: { pageSize?: number; limit?: number };\n initialLoad?: \"auto\" | \"immediate\" | \"open\";\n displayMenuAs?: \"auto\" | \"popover\" | \"dialog\";\n ref: ForwardedRef<{ clearCache: () => void; invalidate: () => void }>;\n};\n\n/**\n * Resolves menu surface and initial-load mode, then wires option loading and\n * an imperative `clearCache` / `invalidate` handle. `displayMenuAs: \"auto\"` is\n * dialog on mobile and popover otherwise; `initialLoad: \"auto\"` is immediate.\n * `invalidate` also resets `initialLoadPerformed`.\n */\nexport function useSelectOrchestration<TID extends string | number>(\n config: UseSelectOrchestrationConfig,\n) {\n const {\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions,\n initialLoad: initialLoadProp = \"auto\",\n displayMenuAs: displayMenuAsProp = \"auto\",\n ref,\n } = config;\n\n const [initialLoadPerformed, setInitialLoadPerformed] = useState(false);\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n const initialLoad =\n initialLoadProp === \"auto\" ? \"immediate\" : initialLoadProp;\n\n const pageSize =\n lazy === \"page\"\n ? (lazyOptions?.pageSize ?? DEFAULT_PAGE_SIZE)\n : DEFAULT_PAGE_SIZE;\n const limit =\n lazy === \"offset\"\n ? (lazyOptions?.limit ?? DEFAULT_PAGE_SIZE)\n : DEFAULT_PAGE_SIZE;\n\n const loadingHookConfig = useMemo(() => {\n const cacheConfig = {\n enabled: cache?.enabled,\n maxSize: cache?.maxSize,\n };\n if (lazy === \"page\")\n return {\n lazy: \"page\" as const,\n loadOptions: loadOptionsProp,\n pageSize,\n cache: cacheConfig,\n };\n if (lazy === \"offset\")\n return {\n lazy: \"offset\" as const,\n loadOptions: loadOptionsProp,\n limit,\n cache: cacheConfig,\n };\n if (lazy === \"group\")\n return {\n lazy: \"group\" as const,\n loadOptions: loadOptionsProp,\n cache: cacheConfig,\n };\n return {\n lazy: false as const,\n loadOptions: loadOptionsProp,\n cache: cacheConfig,\n };\n }, [lazy, loadOptionsProp, pageSize, limit, cache?.enabled, cache?.maxSize]);\n\n const {\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n clearCache,\n } = useSelectFieldLoading<TID>(loadingHookConfig);\n\n useImperativeHandle(\n ref,\n () => ({\n clearCache,\n invalidate: () => {\n clearCache();\n setInitialLoadPerformed(false);\n },\n }),\n [clearCache],\n );\n\n return {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n };\n}\n","import { matchSorter, type MatchSorterOptions } from \"match-sorter\";\nimport type {\n SelectFieldOption,\n SelectFieldGroupByValue,\n} from \"../../components/SelectField/types\";\n\nexport type SyncFilterFn<\n TID extends string | number = string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n> = (options: T[], searchValue: string) => T[];\n\n/** Filters by label and search text, preserving input order for equal matches. */\nexport const defaultSyncFilter = <\n TID extends string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n>(\n options: T[],\n searchValue: string,\n) =>\n matchSorter(options, searchValue, {\n keys: [\"label\", \"searchText\"],\n baseSort: (a, b) => a.index - b.index,\n });\n\n/** Normalizes a filter function or match-sorter options into a sync filter. */\nexport const toSyncFilterFn = <\n TID extends string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n>(\n filter: SyncFilterFn<TID, T> | MatchSorterOptions<T>,\n): SyncFilterFn<TID, T> =>\n typeof filter === \"function\"\n ? filter\n : (options, searchValue) =>\n matchSorter(options, searchValue, {\n baseSort: (a, b) => a.index - b.index,\n ...filter,\n });\n\n/**\n * Orders groups with the comparator, keeps options stable within each group,\n * and places ungrouped options last.\n */\nexport const sortByGroup = <\n TID extends string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n>(\n options: T[],\n groupSorter: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number,\n): T[] => {\n const groupOrder = new Map<SelectFieldGroupByValue | undefined, number>();\n const uniqueGroups: (SelectFieldGroupByValue | undefined)[] = [];\n options.forEach((opt) => {\n if (!groupOrder.has(opt.group)) {\n groupOrder.set(opt.group, uniqueGroups.length);\n uniqueGroups.push(opt.group);\n }\n });\n\n uniqueGroups.sort((a, b) => {\n if (a === undefined && b === undefined) return 0;\n if (a === undefined) return 1;\n if (b === undefined) return -1;\n return groupSorter(a, b);\n });\n\n uniqueGroups.forEach((group, index) => {\n groupOrder.set(group, index);\n });\n\n return [...options].sort((a, b) => {\n const orderA = groupOrder.get(a.group) ?? Infinity;\n const orderB = groupOrder.get(b.group) ?? Infinity;\n return orderA - orderB;\n });\n};\n"],"names":["options","Check","styles","Add"],"mappings":"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"}
|