@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.
Files changed (79) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{Announcement-Cnz80WGx.js → Announcement-PfnsVVz1.js} +5 -2
  3. package/dist/Announcement-PfnsVVz1.js.map +1 -0
  4. package/dist/Announcement.js +1 -1
  5. package/dist/{DataTable-DkEpJ_Op.js → DataTable-DIXP9-Bx.js} +4 -4
  6. package/dist/{DataTable-DkEpJ_Op.js.map → DataTable-DIXP9-Bx.js.map} +1 -1
  7. package/dist/{Dialog-B9llUKJz.js → Dialog-_tHqOsbr.js} +2 -2
  8. package/dist/{Dialog-B9llUKJz.js.map → Dialog-_tHqOsbr.js.map} +1 -1
  9. package/dist/Dialog.js +1 -1
  10. package/dist/{Drawer-Bjd2XLUX.js → Drawer-D-ThWNp0.js} +2 -2
  11. package/dist/{Drawer-Bjd2XLUX.js.map → Drawer-D-ThWNp0.js.map} +1 -1
  12. package/dist/Drawer.js +1 -1
  13. package/dist/{FilterBar-ecqJDraA.js → FilterBar-jFn8O7v7.js} +17 -15
  14. package/dist/FilterBar-jFn8O7v7.js.map +1 -0
  15. package/dist/FilterBar.js +1 -1
  16. package/dist/MultiSelectField.js +1 -1
  17. package/dist/{MultiSelectFieldSync-DpPO0cya.js → MultiSelectFieldSync-DuImKXuj.js} +3 -3
  18. package/dist/{MultiSelectFieldSync-DpPO0cya.js.map → MultiSelectFieldSync-DuImKXuj.js.map} +1 -1
  19. package/dist/MultiSelectMenu.js +1 -1
  20. package/dist/{MultiSelectMenuSync-BN_3moW_.js → MultiSelectMenuSync-BhNXsgAN.js} +3 -3
  21. package/dist/{MultiSelectMenuSync-BN_3moW_.js.map → MultiSelectMenuSync-BhNXsgAN.js.map} +1 -1
  22. package/dist/{Page-IZ4p51iJ.js → Page-ZSHNJs7z.js} +2 -2
  23. package/dist/{Page-IZ4p51iJ.js.map → Page-ZSHNJs7z.js.map} +1 -1
  24. package/dist/Page.js +1 -1
  25. package/dist/{Pagination-Su4VBAhT.js → Pagination-Bsl99RRI.js} +4 -2
  26. package/dist/{Pagination-Su4VBAhT.js.map → Pagination-Bsl99RRI.js.map} +1 -1
  27. package/dist/Pagination.js +1 -1
  28. package/dist/{ProgressBar-TQ0fPmn9.js → ProgressBar-zPKYv4Il.js} +10 -13
  29. package/dist/ProgressBar-zPKYv4Il.js.map +1 -0
  30. package/dist/ProgressBar.css +10 -14
  31. package/dist/ProgressBar.js +1 -1
  32. package/dist/{RichTextEditor-BpzUo8dB.js → RichTextEditor-DcAVqd2d.js} +18821 -20223
  33. package/dist/RichTextEditor-DcAVqd2d.js.map +1 -0
  34. package/dist/RichTextEditor.js +1 -1
  35. package/dist/{SavedFiltersButton-D9GJbJQu.js → SavedFiltersButton-Bl8mr-LB.js} +4 -4
  36. package/dist/{SavedFiltersButton-D9GJbJQu.js.map → SavedFiltersButton-Bl8mr-LB.js.map} +1 -1
  37. package/dist/SavedFiltersButton.js +1 -1
  38. package/dist/SelectField.js +1 -1
  39. package/dist/{SelectFieldSync-BN2ebLWT.js → SelectFieldSync-SS7FELT3.js} +3 -3
  40. package/dist/{SelectFieldSync-BN2ebLWT.js.map → SelectFieldSync-SS7FELT3.js.map} +1 -1
  41. package/dist/SelectMenu.js +1 -1
  42. package/dist/{SelectMenuSync-DuPf8KCc.js → SelectMenuSync-CPpE6vUG.js} +3 -3
  43. package/dist/{SelectMenuSync-DuPf8KCc.js.map → SelectMenuSync-CPpE6vUG.js.map} +1 -1
  44. package/dist/{SelectOptions-BK7kNjYM.js → SelectOptions-BDAu_9dv.js} +2 -2
  45. package/dist/{SelectOptions-BK7kNjYM.js.map → SelectOptions-BDAu_9dv.js.map} +1 -1
  46. package/dist/Table.js +1 -1
  47. package/dist/Toast.js +2 -2
  48. package/dist/{Toaster-BryQmKe1.js → Toaster-SqkX0Kes.js} +2 -2
  49. package/dist/{Toaster-BryQmKe1.js.map → Toaster-SqkX0Kes.js.map} +1 -1
  50. package/dist/{Toaster-BtP_HezK.js → Toaster-dVGVVcat.js} +2 -2
  51. package/dist/{Toaster-BtP_HezK.js.map → Toaster-dVGVVcat.js.map} +1 -1
  52. package/dist/assets/icons/material.ts +184 -184
  53. package/dist/assets/icons/st.ts +9 -9
  54. package/dist/beta.js +9 -9
  55. package/dist/{bulkActionTypes-D5y3Acn1.js → bulkActionTypes-SukoplGV.js} +2 -2
  56. package/dist/{bulkActionTypes-D5y3Acn1.js.map → bulkActionTypes-SukoplGV.js.map} +1 -1
  57. package/dist/downshift.esm-U4VMqrF-.js.map +1 -1
  58. package/dist/extends-Bg2s_OKl.js.map +1 -1
  59. package/dist/{filter-state-Do862BNr.js → filter-state-hDtCUggM.js} +6 -6
  60. package/dist/{filter-state-Do862BNr.js.map → filter-state-hDtCUggM.js.map} +1 -1
  61. package/dist/{index-Dt0zG4YB.js → index-C2dOrf4N.js} +1549 -1582
  62. package/dist/index-C2dOrf4N.js.map +1 -0
  63. package/dist/index.js +11 -11
  64. package/dist/src/components/Pagination/Pagination.d.ts +28 -0
  65. package/dist/src/internal/components/LoadMoreSlot.d.ts +13 -0
  66. package/dist/src/internal/hooks/useAutoLoadMore.d.ts +40 -0
  67. package/dist/src/internal/hooks/useFocusReturnOnUnmount.d.ts +10 -0
  68. package/dist/{syncFilterUtils-ClEj4Oeg.js → syncFilterUtils-SMop8ckR.js} +177 -62
  69. package/dist/syncFilterUtils-SMop8ckR.js.map +1 -0
  70. package/package.json +21 -21
  71. package/dist/Announcement-Cnz80WGx.js.map +0 -1
  72. package/dist/FilterBar-ecqJDraA.js.map +0 -1
  73. package/dist/ProgressBar-TQ0fPmn9.js.map +0 -1
  74. package/dist/RichTextEditor-BpzUo8dB.js.map +0 -1
  75. package/dist/check_circle-C3DDoVXp.js +0 -8
  76. package/dist/check_circle-C3DDoVXp.js.map +0 -1
  77. package/dist/index-Dt0zG4YB.js.map +0 -1
  78. package/dist/src/internal/components/InView.d.ts +0 -14
  79. package/dist/syncFilterUtils-ClEj4Oeg.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectMenuSync-BN_3moW_.js","sources":["../src/components/MultiSelectMenu/parts.ts","../src/components/MultiSelectMenu/MultiSelectMenu.tsx","../src/components/MultiSelectMenu/MultiSelectMenuSync.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for MultiSelectMenu interactive sub-elements.\n *\n * There is no wrapper root — attach consumer `data-*` (e.g. `data-cy`) via\n * props; they are merged into the trigger render-prop bag. Portaled\n * `menu` / `option` / `popover` / `dialog` / footer buttons come from shared\n * internals (not redeclared here).\n */\nexport const PARTS = {\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n} as const;\n","import type {\n MultiSelectMenuHandle,\n MultiSelectMenuOption,\n MultiSelectMenuProps,\n} from \"./types\";\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { warnOnce } from \"../../internal/functions\";\nimport { MultiSelectOptions } from \"../../internal/components/MultiSelectOptions\";\nimport { useDebouncedCallback } from \"../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../internal/types/addNewItemTypes\";\nimport { MenuFooter } from \"../../internal/components/MenuFooter/MenuFooter\";\nimport { useProcessedOptions } from \"../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"../SelectMenu/internal/useMenuInteraction\";\nimport { useToggleSelection } from \"../../internal/hooks/useToggleSelection\";\nimport type { SelectItem } from \"../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../internal/hooks/useSelectOrchestration\";\nimport { useConfirmationDraft } from \"../../internal/hooks/useConfirmationDraft\";\nimport { useBulkActionRunner } from \"../../internal/hooks/useBulkActionRunner\";\nimport {\n resolveBulkActionCheckState,\n resolveBulkActionLabel,\n} from \"../../internal/types/bulkActionTypes\";\nimport { resolveConfirmation } from \"../../internal/types/confirmationTypes\";\nimport { arrayIdsEqual } from \"../../internal/utils/arrayIdsEqual\";\nimport { SearchField } from \"../../components\";\nimport type { DataAttributes } from \"../../types\";\nimport { ANV_PART_ATTR } from \"../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\n/** Multi-select menu opened from a custom trigger. Selection is controlled. */\nexport const MultiSelectMenu = forwardRef<\n MultiSelectMenuHandle,\n MultiSelectMenuProps\n>((props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n value: selectedOptions,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionsChange,\n cache,\n pinned,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n addItemLabel,\n onAddNewItem,\n confirmation: confirmationProp,\n clear,\n } = props;\n\n const confirmation = resolveConfirmation(confirmationProp);\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n\n if (disableSearch && selectFilteredProp) {\n warnOnce(\n \"MultiSelectMenu: `selectFiltered` has no effect when `disableSearch` is true because there is no search input to produce filtered results.\",\n );\n }\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n // Carry the raw `checkState` (which may be a function of the current\n // selection) through here; it is resolved against the live draft in\n // `bulkActionItems` so the row can reflect the current selection.\n const selectAll = useMemo(\n () =>\n selectAllProp\n ? {\n label: selectAllProp.label,\n onClick: selectAllProp.onClick,\n compute: selectAllProp.compute,\n checkState: selectAllProp.checkState,\n }\n : undefined,\n [selectAllProp],\n );\n\n const selectFiltered = useMemo(\n () =>\n selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: config.label,\n onClick: config.onClick,\n compute: config.compute,\n checkState: config.checkState,\n };\n }\n : undefined,\n [selectFilteredProp],\n );\n\n // Warn once if `selectAll` is configured with `onClick` while confirmation is\n // enabled — that combination bypasses the draft. `selectFiltered` is a\n // function whose returned shape is only known at activation, so its warning\n // lives at the call site (runBulkAction).\n useEffect(() => {\n if (!confirmation.enabled) return;\n if (selectAllProp && !selectAllProp.compute) {\n warnOnce(\n \"MultiSelectMenu: `selectAll.onClick` bypasses confirmation. \" +\n \"Use `selectAll.compute` to integrate the bulk action with the draft.\",\n );\n }\n }, [confirmation.enabled, selectAllProp]);\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const [isOpen, setIsOpen] = useState(false);\n\n const {\n displayValue: draftSelectedOptions,\n setDraft,\n apply,\n cancel,\n } = useConfirmationDraft({\n value: selectedOptions,\n onCommit: onSelectedOptionsChange,\n isOpen,\n enabled: confirmation.enabled,\n isEqual: arrayIdsEqual,\n });\n\n const {\n pending: bulkPending,\n runBulk,\n setDraftAndBump,\n reset: resetBulk,\n } = useBulkActionRunner<MultiSelectMenuOption>({ setDraft });\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions: draftSelectedOptions,\n // Route per-option toggles through setDraftAndBump so that any in-flight\n // bulk-action promise's resolution is discarded if it arrives after this\n // click.\n onSelectedOptionsChange: setDraftAndBump,\n });\n\n // Run a bulk action against the current draft. If the config provides a\n // `compute` function we run it through the runner (which writes to the\n // draft, supports promises, and discards stale resolutions). If only\n // `onClick` is provided, fire it as-is — the consumer owns the commit.\n const runBulkAction = useCallback(\n (\n config: {\n onClick?: () => void;\n compute?: (\n current: MultiSelectMenuOption[],\n ) => MultiSelectMenuOption[] | Promise<MultiSelectMenuOption[]>;\n },\n kind: \"selectAll\" | \"selectFiltered\",\n ) => {\n if (config.compute) {\n runBulk(config.compute, draftSelectedOptions);\n } else if (config.onClick) {\n if (confirmation.enabled && kind === \"selectFiltered\") {\n warnOnce(\n \"MultiSelectMenu: `selectFiltered.onClick` bypasses confirmation. \" +\n \"Use `selectFiltered.compute` to integrate the bulk action with the draft.\",\n );\n }\n config.onClick();\n }\n },\n [runBulk, draftSelectedOptions, confirmation.enabled],\n );\n\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n if (selectAll && !searchValue) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: {\n id: \"select-all\",\n label: resolveBulkActionLabel(selectAll.label, draftSelectedOptions),\n },\n checkState: bulkPending\n ? \"loading\"\n : resolveBulkActionCheckState(\n selectAll.checkState,\n draftSelectedOptions,\n ),\n });\n }\n if (selectFiltered && searchValue && !loading) {\n const config = selectFiltered(searchValue);\n items.push({\n id: \"select-filtered\",\n type: \"select-filtered\",\n original: {\n id: \"select-filtered\",\n label: resolveBulkActionLabel(\n config.label,\n draftSelectedOptions,\n `Select items matching \"${searchValue}\"`,\n ),\n },\n checkState: bulkPending\n ? \"loading\"\n : resolveBulkActionCheckState(\n config.checkState,\n draftSelectedOptions,\n ),\n });\n }\n return items;\n }, [\n selectAll,\n selectFiltered,\n searchValue,\n loading,\n bulkPending,\n draftSelectedOptions,\n ]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(draftSelectedOptions.map((o) => o.id)),\n [draftSelectedOptions],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (item.type === \"select-all\") {\n if (selectAll) runBulkAction(selectAll, \"selectAll\");\n } else if (item.type === \"select-filtered\" && selectFiltered) {\n runBulkAction(selectFiltered(searchValue), \"selectFiltered\");\n } else if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n handleItemClick(item.original);\n }\n },\n [selectAll, selectFiltered, searchValue, handleItemClick, runBulkAction],\n );\n\n // Apply, Clear, and add-new set this so close handlers skip draft cancel.\n const pendingApplyRef = useRef(false);\n\n const {\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: false,\n // While a bulk-action promise is pending, disable all rows but keep the\n // menu open so confirmation/draft UX is not interrupted.\n disabled: bulkPending,\n closeOnDisabled: false,\n id,\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n onImplicitClose: () => {\n if (confirmation.enabled && !pendingApplyRef.current) cancel();\n pendingApplyRef.current = false;\n resetBulk();\n onImplicitClose?.();\n },\n onExplicitClose: () => {\n if (confirmation.enabled && !pendingApplyRef.current) cancel();\n pendingApplyRef.current = false;\n resetBulk();\n onExplicitClose?.();\n },\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\n );\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n ]);\n\n // Wait a frame so the popover is in the tree before focusing search/list.\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = {\n ...getTriggerProps(),\n ...dataAttributes,\n [ANV_PART_ATTR]: PARTS.trigger,\n };\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const handleApply = useCallback(() => {\n apply();\n pendingApplyRef.current = true;\n closeMenu();\n }, [apply, closeMenu]);\n\n const handleCancel = useCallback(() => {\n closeMenu();\n }, [closeMenu]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={handleInputChange as React.ChangeEventHandler<HTMLInputElement>}\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n ) : null;\n\n const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n inputValue,\n ) ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={() => {\n pendingApplyRef.current = true;\n closeMenu({ restoreFocus: false });\n }}\n />\n ) : null;\n\n const confirmationConfig = confirmation.enabled\n ? {\n applyLabel: confirmation.applyLabel,\n cancelLabel: confirmation.cancelLabel,\n onApply: handleApply,\n onCancel: handleCancel,\n }\n : undefined;\n // Wrap clear's onClick so clicking Clear always also closes the menu and\n // returns focus to the trigger. In confirmation mode, flag the close as an\n // intentional commit so the implicit-close handler doesn't treat it as a\n // cancel.\n const wrappedClear = clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n if (confirmation.enabled) pendingApplyRef.current = true;\n closeMenu();\n },\n }\n : undefined;\n // Only render a footer when at least one slot has content; passing an empty\n // <MenuFooter/> would still draw the popover/dialog footer divider.\n const hasFooter =\n !!wrappedClear || !!confirmationConfig || !!addNewItemButton;\n const footer = hasFooter ? (\n <MenuFooter\n clear={wrappedClear}\n confirmation={confirmationConfig}\n addNew={addNewItemButton}\n />\n ) : undefined;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n footer={footer ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={draftSelectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={footer ?? undefined}\n >\n {searchInput}\n <MultiSelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={draftSelectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n});\n\nMultiSelectMenu.displayName = \"MultiSelectMenu\";\n","import { useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectMenu } from \"./MultiSelectMenu\";\nimport type {\n MultiSelectMenuHandle,\n MultiSelectMenuProps,\n MultiSelectMenuOption,\n} from \"./types\";\nimport type { CheckState } from \"../../types\";\nimport {\n type SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../internal/functions/syncFilterUtils\";\nimport { useInvalidateOnOptionsChange } from \"../../internal/hooks/useInvalidateOnOptionsChange\";\n\nconst getEnabledSelectionStats = (\n options: MultiSelectMenuOption[],\n current: MultiSelectMenuOption[],\n) => {\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = current.filter((v) => enabledIds.has(v.id)).length;\n const totalCount = enabledOptions.length;\n const allSelected = totalCount > 0 && selectedCount === totalCount;\n\n return { enabledOptions, enabledIds, selectedCount, allSelected };\n};\n\nexport type MultiSelectMenuSyncProps<\n TID extends string | number = string | number,\n> = Omit<\n MultiSelectMenuProps<TID>,\n | \"loadOptions\"\n | \"lazy\"\n | \"debounceMs\"\n | \"cache\"\n | \"initialLoad\"\n | \"selectAll\"\n | \"selectFiltered\"\n> & {\n /** In-memory options. Search filters this list instead of calling `loadOptions`. */\n options: MultiSelectMenuOption<TID>[];\n /**\n * Filter and sort as the user types. A function returns the display order;\n * a match-sorter options object customizes the default. Defaults to\n * match-sorter on `label` and `searchText`.\n */\n filter?:\n | SyncFilterFn<TID, MultiSelectMenuOption<TID>>\n | MatchSorterOptions<MultiSelectMenuOption<TID>>;\n /**\n * Select All when search is empty. `true` uses the default label; an object\n * customizes the label. Click and check state are owned by Sync.\n */\n selectAll?: boolean | { label?: string | ((checked: boolean) => string) };\n /**\n * Select Filtered when search is non-empty. `true` uses the default label;\n * a function may return a custom label. Click and check state are owned by\n * Sync.\n */\n selectFiltered?: boolean | ((searchValue: string) => { label?: string });\n};\n\n/** {@link MultiSelectMenu} for a client-side `options` list. */\nexport const MultiSelectMenuSync = (props: MultiSelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n value,\n onSelectedOptionsChange,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const selectAllConfig = useMemo(() => {\n if (!selectAllProp) return undefined;\n\n const labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n\n const checkState = (current: MultiSelectMenuOption[]): CheckState => {\n const { selectedCount, allSelected } = getEnabledSelectionStats(\n options,\n current,\n );\n return allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n };\n\n const label =\n typeof labelProp === \"function\"\n ? (current: MultiSelectMenuOption[]) =>\n labelProp(getEnabledSelectionStats(options, current).allSelected)\n : labelProp;\n\n const compute = (current: MultiSelectMenuOption[]) => {\n const { enabledOptions, enabledIds } = getEnabledSelectionStats(\n options,\n current,\n );\n const currentIds = new Set(current.map((v) => v.id));\n const allEnabledSelected =\n enabledOptions.length > 0 &&\n enabledOptions.every((o) => currentIds.has(o.id));\n if (allEnabledSelected) {\n return current.filter((v) => !enabledIds.has(v.id));\n }\n const additions = enabledOptions.filter((o) => !currentIds.has(o.id));\n return [...current, ...additions];\n };\n\n return {\n label,\n compute,\n checkState,\n };\n }, [selectAllProp, options]);\n\n const selectFilteredConfig = useMemo(() => {\n if (!selectFilteredProp) return undefined;\n\n return (searchValue: string) => {\n const filteredOptions = filter(options, searchValue);\n const enabledFilteredOptions = filteredOptions.filter(\n (opt) => !opt.disabled,\n );\n const enabledFilteredIds = new Set(\n enabledFilteredOptions.map((o) => o.id),\n );\n\n const label =\n (typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined) ?? `Select items matching \"${searchValue}\"`;\n\n const checkState = (current: MultiSelectMenuOption[]): CheckState => {\n const currentIds = new Set(current.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => currentIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n currentIds.has(opt.id),\n );\n\n return allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n };\n\n const compute = (current: MultiSelectMenuOption[]) => {\n const currentIds = new Set(current.map((v) => v.id));\n const allEnabledFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((o) => currentIds.has(o.id));\n if (allEnabledFilteredSelected) {\n return current.filter((v) => !enabledFilteredIds.has(v.id));\n }\n const additions = enabledFilteredOptions.filter(\n (o) => !currentIds.has(o.id),\n );\n return [...current, ...additions];\n };\n\n return {\n label,\n compute,\n checkState,\n };\n };\n }, [selectFilteredProp, options, filter]);\n\n const fieldRef = useRef<MultiSelectMenuHandle>(null);\n useInvalidateOnOptionsChange(fieldRef, options);\n\n return (\n <MultiSelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={(searchValue) => filter(options, searchValue)}\n debounceMs={0}\n value={value}\n onSelectedOptionsChange={onSelectedOptionsChange}\n selectAll={selectAllConfig}\n selectFiltered={selectFilteredConfig}\n {...rest}\n />\n );\n};\n"],"names":["searchValue","items"],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelectMenuSync-BhNXsgAN.js","sources":["../src/components/MultiSelectMenu/parts.ts","../src/components/MultiSelectMenu/MultiSelectMenu.tsx","../src/components/MultiSelectMenu/MultiSelectMenuSync.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for MultiSelectMenu interactive sub-elements.\n *\n * There is no wrapper root — attach consumer `data-*` (e.g. `data-cy`) via\n * props; they are merged into the trigger render-prop bag. Portaled\n * `menu` / `option` / `popover` / `dialog` / footer buttons come from shared\n * internals (not redeclared here).\n */\nexport const PARTS = {\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n} as const;\n","import type {\n MultiSelectMenuHandle,\n MultiSelectMenuOption,\n MultiSelectMenuProps,\n} from \"./types\";\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { warnOnce } from \"../../internal/functions\";\nimport { MultiSelectOptions } from \"../../internal/components/MultiSelectOptions\";\nimport { useDebouncedCallback } from \"../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../internal/types/addNewItemTypes\";\nimport { MenuFooter } from \"../../internal/components/MenuFooter/MenuFooter\";\nimport { useProcessedOptions } from \"../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"../SelectMenu/internal/useMenuInteraction\";\nimport { useToggleSelection } from \"../../internal/hooks/useToggleSelection\";\nimport type { SelectItem } from \"../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../internal/hooks/useSelectOrchestration\";\nimport { useConfirmationDraft } from \"../../internal/hooks/useConfirmationDraft\";\nimport { useBulkActionRunner } from \"../../internal/hooks/useBulkActionRunner\";\nimport {\n resolveBulkActionCheckState,\n resolveBulkActionLabel,\n} from \"../../internal/types/bulkActionTypes\";\nimport { resolveConfirmation } from \"../../internal/types/confirmationTypes\";\nimport { arrayIdsEqual } from \"../../internal/utils/arrayIdsEqual\";\nimport { SearchField } from \"../../components\";\nimport type { DataAttributes } from \"../../types\";\nimport { ANV_PART_ATTR } from \"../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\n/** Multi-select menu opened from a custom trigger. Selection is controlled. */\nexport const MultiSelectMenu = forwardRef<\n MultiSelectMenuHandle,\n MultiSelectMenuProps\n>((props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n value: selectedOptions,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionsChange,\n cache,\n pinned,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n addItemLabel,\n onAddNewItem,\n confirmation: confirmationProp,\n clear,\n } = props;\n\n const confirmation = resolveConfirmation(confirmationProp);\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n\n if (disableSearch && selectFilteredProp) {\n warnOnce(\n \"MultiSelectMenu: `selectFiltered` has no effect when `disableSearch` is true because there is no search input to produce filtered results.\",\n );\n }\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n // Carry the raw `checkState` (which may be a function of the current\n // selection) through here; it is resolved against the live draft in\n // `bulkActionItems` so the row can reflect the current selection.\n const selectAll = useMemo(\n () =>\n selectAllProp\n ? {\n label: selectAllProp.label,\n onClick: selectAllProp.onClick,\n compute: selectAllProp.compute,\n checkState: selectAllProp.checkState,\n }\n : undefined,\n [selectAllProp],\n );\n\n const selectFiltered = useMemo(\n () =>\n selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: config.label,\n onClick: config.onClick,\n compute: config.compute,\n checkState: config.checkState,\n };\n }\n : undefined,\n [selectFilteredProp],\n );\n\n // Warn once if `selectAll` is configured with `onClick` while confirmation is\n // enabled — that combination bypasses the draft. `selectFiltered` is a\n // function whose returned shape is only known at activation, so its warning\n // lives at the call site (runBulkAction).\n useEffect(() => {\n if (!confirmation.enabled) return;\n if (selectAllProp && !selectAllProp.compute) {\n warnOnce(\n \"MultiSelectMenu: `selectAll.onClick` bypasses confirmation. \" +\n \"Use `selectAll.compute` to integrate the bulk action with the draft.\",\n );\n }\n }, [confirmation.enabled, selectAllProp]);\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const [isOpen, setIsOpen] = useState(false);\n\n const {\n displayValue: draftSelectedOptions,\n setDraft,\n apply,\n cancel,\n } = useConfirmationDraft({\n value: selectedOptions,\n onCommit: onSelectedOptionsChange,\n isOpen,\n enabled: confirmation.enabled,\n isEqual: arrayIdsEqual,\n });\n\n const {\n pending: bulkPending,\n runBulk,\n setDraftAndBump,\n reset: resetBulk,\n } = useBulkActionRunner<MultiSelectMenuOption>({ setDraft });\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions: draftSelectedOptions,\n // Route per-option toggles through setDraftAndBump so that any in-flight\n // bulk-action promise's resolution is discarded if it arrives after this\n // click.\n onSelectedOptionsChange: setDraftAndBump,\n });\n\n // Run a bulk action against the current draft. If the config provides a\n // `compute` function we run it through the runner (which writes to the\n // draft, supports promises, and discards stale resolutions). If only\n // `onClick` is provided, fire it as-is — the consumer owns the commit.\n const runBulkAction = useCallback(\n (\n config: {\n onClick?: () => void;\n compute?: (\n current: MultiSelectMenuOption[],\n ) => MultiSelectMenuOption[] | Promise<MultiSelectMenuOption[]>;\n },\n kind: \"selectAll\" | \"selectFiltered\",\n ) => {\n if (config.compute) {\n runBulk(config.compute, draftSelectedOptions);\n } else if (config.onClick) {\n if (confirmation.enabled && kind === \"selectFiltered\") {\n warnOnce(\n \"MultiSelectMenu: `selectFiltered.onClick` bypasses confirmation. \" +\n \"Use `selectFiltered.compute` to integrate the bulk action with the draft.\",\n );\n }\n config.onClick();\n }\n },\n [runBulk, draftSelectedOptions, confirmation.enabled],\n );\n\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n if (selectAll && !searchValue) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: {\n id: \"select-all\",\n label: resolveBulkActionLabel(selectAll.label, draftSelectedOptions),\n },\n checkState: bulkPending\n ? \"loading\"\n : resolveBulkActionCheckState(\n selectAll.checkState,\n draftSelectedOptions,\n ),\n });\n }\n if (selectFiltered && searchValue && !loading) {\n const config = selectFiltered(searchValue);\n items.push({\n id: \"select-filtered\",\n type: \"select-filtered\",\n original: {\n id: \"select-filtered\",\n label: resolveBulkActionLabel(\n config.label,\n draftSelectedOptions,\n `Select items matching \"${searchValue}\"`,\n ),\n },\n checkState: bulkPending\n ? \"loading\"\n : resolveBulkActionCheckState(\n config.checkState,\n draftSelectedOptions,\n ),\n });\n }\n return items;\n }, [\n selectAll,\n selectFiltered,\n searchValue,\n loading,\n bulkPending,\n draftSelectedOptions,\n ]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(draftSelectedOptions.map((o) => o.id)),\n [draftSelectedOptions],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (item.type === \"select-all\") {\n if (selectAll) runBulkAction(selectAll, \"selectAll\");\n } else if (item.type === \"select-filtered\" && selectFiltered) {\n runBulkAction(selectFiltered(searchValue), \"selectFiltered\");\n } else if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n handleItemClick(item.original);\n }\n },\n [selectAll, selectFiltered, searchValue, handleItemClick, runBulkAction],\n );\n\n // Apply, Clear, and add-new set this so close handlers skip draft cancel.\n const pendingApplyRef = useRef(false);\n\n const {\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: false,\n // While a bulk-action promise is pending, disable all rows but keep the\n // menu open so confirmation/draft UX is not interrupted.\n disabled: bulkPending,\n closeOnDisabled: false,\n id,\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n onImplicitClose: () => {\n if (confirmation.enabled && !pendingApplyRef.current) cancel();\n pendingApplyRef.current = false;\n resetBulk();\n onImplicitClose?.();\n },\n onExplicitClose: () => {\n if (confirmation.enabled && !pendingApplyRef.current) cancel();\n pendingApplyRef.current = false;\n resetBulk();\n onExplicitClose?.();\n },\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\n );\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n ]);\n\n // Wait a frame so the popover is in the tree before focusing search/list.\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = {\n ...getTriggerProps(),\n ...dataAttributes,\n [ANV_PART_ATTR]: PARTS.trigger,\n };\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const handleApply = useCallback(() => {\n apply();\n pendingApplyRef.current = true;\n closeMenu();\n }, [apply, closeMenu]);\n\n const handleCancel = useCallback(() => {\n closeMenu();\n }, [closeMenu]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={handleInputChange as React.ChangeEventHandler<HTMLInputElement>}\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n ) : null;\n\n const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n inputValue,\n ) ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={() => {\n pendingApplyRef.current = true;\n closeMenu({ restoreFocus: false });\n }}\n />\n ) : null;\n\n const confirmationConfig = confirmation.enabled\n ? {\n applyLabel: confirmation.applyLabel,\n cancelLabel: confirmation.cancelLabel,\n onApply: handleApply,\n onCancel: handleCancel,\n }\n : undefined;\n // Wrap clear's onClick so clicking Clear always also closes the menu and\n // returns focus to the trigger. In confirmation mode, flag the close as an\n // intentional commit so the implicit-close handler doesn't treat it as a\n // cancel.\n const wrappedClear = clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n if (confirmation.enabled) pendingApplyRef.current = true;\n closeMenu();\n },\n }\n : undefined;\n // Only render a footer when at least one slot has content; passing an empty\n // <MenuFooter/> would still draw the popover/dialog footer divider.\n const hasFooter =\n !!wrappedClear || !!confirmationConfig || !!addNewItemButton;\n const footer = hasFooter ? (\n <MenuFooter\n clear={wrappedClear}\n confirmation={confirmationConfig}\n addNew={addNewItemButton}\n />\n ) : undefined;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n footer={footer ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={draftSelectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={footer ?? undefined}\n >\n {searchInput}\n <MultiSelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={draftSelectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n});\n\nMultiSelectMenu.displayName = \"MultiSelectMenu\";\n","import { useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectMenu } from \"./MultiSelectMenu\";\nimport type {\n MultiSelectMenuHandle,\n MultiSelectMenuProps,\n MultiSelectMenuOption,\n} from \"./types\";\nimport type { CheckState } from \"../../types\";\nimport {\n type SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../internal/functions/syncFilterUtils\";\nimport { useInvalidateOnOptionsChange } from \"../../internal/hooks/useInvalidateOnOptionsChange\";\n\nconst getEnabledSelectionStats = (\n options: MultiSelectMenuOption[],\n current: MultiSelectMenuOption[],\n) => {\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = current.filter((v) => enabledIds.has(v.id)).length;\n const totalCount = enabledOptions.length;\n const allSelected = totalCount > 0 && selectedCount === totalCount;\n\n return { enabledOptions, enabledIds, selectedCount, allSelected };\n};\n\nexport type MultiSelectMenuSyncProps<\n TID extends string | number = string | number,\n> = Omit<\n MultiSelectMenuProps<TID>,\n | \"loadOptions\"\n | \"lazy\"\n | \"debounceMs\"\n | \"cache\"\n | \"initialLoad\"\n | \"selectAll\"\n | \"selectFiltered\"\n> & {\n /** In-memory options. Search filters this list instead of calling `loadOptions`. */\n options: MultiSelectMenuOption<TID>[];\n /**\n * Filter and sort as the user types. A function returns the display order;\n * a match-sorter options object customizes the default. Defaults to\n * match-sorter on `label` and `searchText`.\n */\n filter?:\n | SyncFilterFn<TID, MultiSelectMenuOption<TID>>\n | MatchSorterOptions<MultiSelectMenuOption<TID>>;\n /**\n * Select All when search is empty. `true` uses the default label; an object\n * customizes the label. Click and check state are owned by Sync.\n */\n selectAll?: boolean | { label?: string | ((checked: boolean) => string) };\n /**\n * Select Filtered when search is non-empty. `true` uses the default label;\n * a function may return a custom label. Click and check state are owned by\n * Sync.\n */\n selectFiltered?: boolean | ((searchValue: string) => { label?: string });\n};\n\n/** {@link MultiSelectMenu} for a client-side `options` list. */\nexport const MultiSelectMenuSync = (props: MultiSelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n value,\n onSelectedOptionsChange,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const selectAllConfig = useMemo(() => {\n if (!selectAllProp) return undefined;\n\n const labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n\n const checkState = (current: MultiSelectMenuOption[]): CheckState => {\n const { selectedCount, allSelected } = getEnabledSelectionStats(\n options,\n current,\n );\n return allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n };\n\n const label =\n typeof labelProp === \"function\"\n ? (current: MultiSelectMenuOption[]) =>\n labelProp(getEnabledSelectionStats(options, current).allSelected)\n : labelProp;\n\n const compute = (current: MultiSelectMenuOption[]) => {\n const { enabledOptions, enabledIds } = getEnabledSelectionStats(\n options,\n current,\n );\n const currentIds = new Set(current.map((v) => v.id));\n const allEnabledSelected =\n enabledOptions.length > 0 &&\n enabledOptions.every((o) => currentIds.has(o.id));\n if (allEnabledSelected) {\n return current.filter((v) => !enabledIds.has(v.id));\n }\n const additions = enabledOptions.filter((o) => !currentIds.has(o.id));\n return [...current, ...additions];\n };\n\n return {\n label,\n compute,\n checkState,\n };\n }, [selectAllProp, options]);\n\n const selectFilteredConfig = useMemo(() => {\n if (!selectFilteredProp) return undefined;\n\n return (searchValue: string) => {\n const filteredOptions = filter(options, searchValue);\n const enabledFilteredOptions = filteredOptions.filter(\n (opt) => !opt.disabled,\n );\n const enabledFilteredIds = new Set(\n enabledFilteredOptions.map((o) => o.id),\n );\n\n const label =\n (typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined) ?? `Select items matching \"${searchValue}\"`;\n\n const checkState = (current: MultiSelectMenuOption[]): CheckState => {\n const currentIds = new Set(current.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => currentIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n currentIds.has(opt.id),\n );\n\n return allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n };\n\n const compute = (current: MultiSelectMenuOption[]) => {\n const currentIds = new Set(current.map((v) => v.id));\n const allEnabledFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((o) => currentIds.has(o.id));\n if (allEnabledFilteredSelected) {\n return current.filter((v) => !enabledFilteredIds.has(v.id));\n }\n const additions = enabledFilteredOptions.filter(\n (o) => !currentIds.has(o.id),\n );\n return [...current, ...additions];\n };\n\n return {\n label,\n compute,\n checkState,\n };\n };\n }, [selectFilteredProp, options, filter]);\n\n const fieldRef = useRef<MultiSelectMenuHandle>(null);\n useInvalidateOnOptionsChange(fieldRef, options);\n\n return (\n <MultiSelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={(searchValue) => filter(options, searchValue)}\n debounceMs={0}\n value={value}\n onSelectedOptionsChange={onSelectedOptionsChange}\n selectAll={selectAllConfig}\n selectFiltered={selectFilteredConfig}\n {...rest}\n />\n );\n};\n"],"names":["searchValue","items"],"mappings":"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"}
@@ -25,7 +25,7 @@ import { T as TextField } from './TextField-Bxd-Qzoi.js';
25
25
  import { T as Text } from './Text-rihxXHSe.js';
26
26
  import { C as Chip } from './Chip-2OydLs66.js';
27
27
  import { createPortal } from 'react-dom';
28
- import { D as Dialog } from './Dialog-B9llUKJz.js';
28
+ import { D as Dialog } from './Dialog-_tHqOsbr.js';
29
29
  import { d as drillDownStyles, D as DrillDownContext } from './DrillDown.module-1VBKDZRA.js';
30
30
  import { u as useDrillDownContextState } from './useInitialFocus-CGybEc6x.js';
31
31
  import { u as useDrillDownContext } from './useDrillDownContext-D5_NjqY4.js';
@@ -780,4 +780,4 @@ const Page = Object.assign(
780
780
  Page.displayName = "Page";
781
781
 
782
782
  export { Page as P };
783
- //# sourceMappingURL=Page-IZ4p51iJ.js.map
783
+ //# sourceMappingURL=Page-ZSHNJs7z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Page-IZ4p51iJ.js","sources":["../src/beta/components/Page/PageSidebarContext.ts","../src/beta/components/Page/PageContext.ts","../src/beta/components/Page/pageBreakpoint.ts","../src/beta/components/Page/PageSidebar.tsx","../src/beta/components/Page/PageSidebarHeader.tsx","../src/beta/components/Page/PageHeader.tsx","../src/beta/components/Page/PageContent.tsx","../src/beta/components/Page/internal/PagePanelContext.tsx","../src/beta/components/Page/PagePanelHeader.tsx","../src/beta/components/Page/PagePanelContent.tsx","../src/beta/components/Page/PagePanelFooter.tsx","../src/beta/components/Page/PagePanel.tsx","../src/beta/components/Page/PageFooter.tsx","../src/beta/components/Page/Page.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\ntype PageSideBarContextProps = {\n collapsed: boolean;\n};\n\nexport const PageSideBarContext = createContext<PageSideBarContextProps | null>(\n null,\n);\n","import { createContext } from \"react\";\n\nexport const PageContext = createContext<PageContextProps>({});\n\nexport type PageContextProps = {\n /** Observed width of the Page root; undefined outside Page. */\n pageWidth?: number;\n /**\n * Main portal target. Undefined outside Page renders Content in place; null\n * inside Page renders nothing until the slot mounts.\n */\n contentWrapper?: HTMLElement | null;\n /**\n * Footer portal target. Undefined outside Page renders Footer in place; null\n * inside Page renders nothing until the slot mounts.\n */\n footerSlot?: HTMLElement | null;\n};\n","import { core } from \"@servicetitan/hammer-token\";\n\n/**\n * Shared Page boundary between the adaptive and desktop layouts. Parsing once\n * keeps Sidebar, Panel, and Content decisions aligned.\n */\nexport const PAGE_LG_BREAKPOINT = +(\n core.primitive?.BreakpointLg?.value?.replace(\"px\", \"\") ?? 0\n);\n\n/** Whether the page width uses the adaptive Sidebar and Panel forms. */\nexport const isPageMobileWidth = (pageWidth: number | undefined): boolean =>\n (pageWidth ?? 0) < PAGE_LG_BREAKPOINT;\n\n/**\n * Whether Page's main landmark is an independent keyboard-focusable scroll\n * region. Requires a parsed breakpoint and a measured desktop width.\n */\nexport const isPageContentScrollContainerActive = (\n pageWidth: number | undefined,\n): boolean => PAGE_LG_BREAKPOINT > 0 && (pageWidth ?? 0) >= PAGE_LG_BREAKPOINT;\n","import { Button, Icon, Flex, Tooltip } from \"../../../components\";\nimport { Popover } from \"../../../internal/components/Popover\";\nimport { usePopoverContext } from \"../../../internal/components/Popover/internal/usePopoverContext\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n type Ref,\n useContext,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../../hooks\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport SegmentSVG from \"@servicetitan/hammer-icon/mdi/round/segment.svg\";\nimport RespOpen from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport RespClose from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport OpenSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport CloseSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_left.svg\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\nimport { PageContext, type PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\n\nfunction AdaptiveSidebarContent({\n children,\n className,\n innerRef,\n}: {\n children: ReactNode;\n className?: string;\n innerRef?: Ref<HTMLDivElement>;\n}) {\n const { closePopover, openState } = usePopoverContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([containerRef, innerRef]);\n\n useEffect(() => {\n if (!openState) return;\n const overflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = overflow;\n };\n }, [openState]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const handleClick = (e: Event) => {\n if (!(e.target instanceof Element)) return;\n if (e.target.closest(\"a\")) closePopover();\n };\n el.addEventListener(\"click\", handleClick);\n return () => el.removeEventListener(\"click\", handleClick);\n }, [closePopover]);\n\n return (\n <Flex direction=\"column\" className={className} ref={mergedRef}>\n {children}\n </Flex>\n );\n}\n\n/**\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Persists desktop collapsed state under this localStorage key. Defaults to `\"sidebar-collapsed\"`. */\n localStorageKey?: string;\n /** Overrides the generated tracking ID on the desktop toggle button. */\n [\"data-tracking-id\"]?: string;\n /** Smaller-page trigger text. Defaults to `\"Menu\"`. */\n currentPageTitle?: string;\n};\n\n/**\n * Collapsible desktop sidebar with persisted state. On smaller pages it\n * becomes a popover whose trigger shows `currentPageTitle`.\n */\nexport const PageSidebar = forwardRef(\n (props: PageSidebarProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n className,\n currentPageTitle,\n localStorageKey = \"sidebar-collapsed\",\n ...rest\n } = props;\n\n const data = {\n localStorageKey,\n };\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n\n const [isMobile, setIsMobile] = useState<boolean>(() =>\n typeof window !== \"undefined\"\n ? isPageMobileWidth(window.innerWidth)\n : false,\n );\n\n useLayoutEffect(() => {\n if (!pageWidth) return;\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n const trackingId = useTrackingId({\n name: \"PageSidebarButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n const sidebarState = localStorage.getItem(localStorageKey);\n return sidebarState ? JSON.parse(sidebarState) : false;\n });\n const classNames = cx([styles[\"sidebar\"]], className, {\n [styles[\"collapsed\"]]: collapsed,\n });\n const onToggleButtonClick = () => {\n setCollapsed((prev) => {\n localStorage.setItem(localStorageKey, JSON.stringify(!prev));\n return !prev;\n });\n };\n\n if (isMobile) {\n return (\n <Popover fillAvailableHeight matchReferenceWidth noPadding>\n <Popover.Trigger>\n {(props) => {\n return (\n <div className={styles[\"sidebar-adaptive-trigger-container\"]}>\n <Button\n className={styles[\"sidebar-adaptive-trigger\"]}\n icon={SegmentSVG}\n appearance=\"ghost\"\n {...props}\n >\n {!currentPageTitle ? \"Menu\" : currentPageTitle}\n <Icon\n className={styles[\"sidebar-adaptive-trigger-icon\"]}\n justifyContent=\"end\"\n svg={\n props[\"data-state\"] === \"open\" ? RespClose : RespOpen\n }\n />\n </Button>\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content className={styles[\"sidebar-adaptive-container\"]}>\n <AdaptiveSidebarContent\n className={styles[\"sidebar-adaptive\"]}\n innerRef={ref}\n >\n {children}\n </AdaptiveSidebarContent>\n </Popover.Content>\n </Popover>\n );\n }\n\n return (\n <PageSideBarContext.Provider value={{ collapsed }}>\n <div className={classNames} ref={ref} {...rest}>\n <div className={styles[\"sidebar-inner\"]} aria-hidden={collapsed}>\n <div>{children}</div>\n </div>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Tooltip placement=\"right\">\n <Tooltip.Trigger className={styles[\"toggle-button-tooltip\"]}>\n <Button\n size=\"small\"\n onClick={onToggleButtonClick}\n className={styles[\"toggle-button\"]}\n aria-label={collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n data-tracking-id={trackingId}\n icon={collapsed ? OpenSVG : CloseSVG}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n </Tooltip.Content>\n </Tooltip>\n </div>\n </div>\n </PageSideBarContext.Provider>\n );\n },\n);\n\nPageSidebar.displayName = \"Page.Sidebar\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\n\n/** @extends ComponentPropsWithoutRef<\"div\"> */\nexport type PageSidebarHeaderProps = ComponentPropsWithoutRef<\"div\">;\n\n/** Sidebar heading region hidden from accessibility when the sidebar collapses. */\nexport const PageSidebarHeader = forwardRef(\n (props: PageSidebarHeaderProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const context = useContext(PageSideBarContext);\n const classNames = cx([styles[\"sidebar-header\"]], className);\n\n return (\n <div className={classNames} ref={ref} {...rest}>\n <div\n className={styles[\"header-content\"]}\n aria-hidden={context?.collapsed}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nPageSidebarHeader.displayName = \"Page.SidebarHeader\";\n","import {\n type ButtonProps,\n type ButtonLinkProps,\n type BreadcrumbsLinkProps,\n type ChipProps,\n type MenuReturnProps,\n Tooltip,\n ButtonLink,\n Button,\n Flex,\n Menu,\n Breadcrumbs,\n Chip,\n Text,\n TextField,\n} from \"../../../components\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n type Ref,\n useState,\n useRef,\n useEffect,\n type KeyboardEvent,\n} from \"react\";\nimport Layout, { type LayoutProps } from \"../../../components/Layout\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport LocalSettings from \"@servicetitan/hammer-icon/mdi/round/settings.svg\";\nimport MoreVert from \"@servicetitan/hammer-icon/mdi/round/more_vert.svg\";\nimport Edit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport IconKeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\n\ntype PageHeaderActionProps = Omit<ButtonProps, \"appearance\"> & {\n /** Visible button text, or menu-item text when nested under `items`. */\n label: string;\n};\n\n/**\n * Props for a page header action that opens a menu instead of invoking a single\n * handler. `onClick` is omitted because the whole button opens the menu -- an\n * action carrying both a handler and items would be a split button, which\n * Anvil does not support.\n */\ntype PageHeaderMenuActionProps = Omit<PageHeaderActionProps, \"onClick\"> & {\n /** Replaces a direct click handler with a menu opened by the primary button. */\n items: PageHeaderActionProps[];\n};\n\ntype PageHeaderActionsProps = {\n /**\n * Primary action button. Pass `items` instead of `onClick` to render a\n * primary button that opens a menu of actions.\n */\n primary?: PageHeaderActionProps | PageHeaderMenuActionProps;\n /**\n * Secondary buttons. Three or more, or two alongside a primary action,\n * collapse into a More actions menu.\n */\n secondary?: PageHeaderActionProps[];\n};\n\ntype BasePreferenceProps = {\n /** Names the icon-only control and supplies its tooltip text. */\n \"aria-label\": string;\n};\n\ntype PreferenceButtonProps = Omit<\n ButtonProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\ntype PreferenceLinkProps = Omit<\n ButtonLinkProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\ntype PageHeaderTitleConfig = {\n /** Rendered in the page's `h1` and used to initialize the edit field. */\n text: string;\n /**\n * Makes the title editable. Return `false` to keep the editor open after\n * submit or confirmation.\n */\n onChange?: (title: string) => void | boolean;\n /** Accessible name and tooltip for entering edit mode. Defaults to `\"Edit title\"`. */\n editButtonLabel?: string;\n /** Accessible name for the title field. Defaults to `\"Page title\"`. */\n editFieldLabel?: string;\n /** Accessible name and tooltip for confirmation. Defaults to `\"Update title\"`. */\n confirmButtonLabel?: string;\n /** Accessible name and tooltip for cancellation. Defaults to `\"Cancel\"`. */\n cancelButtonLabel?: string;\n};\n\ntype PageHeaderTitle = PageHeaderTitleConfig[\"text\"] | PageHeaderTitleConfig;\n\n/** @extends Omit<ComponentPropsWithoutRef<\"header\">, \"title\"> */\nexport type PageHeaderProps = Omit<\n ComponentPropsWithoutRef<\"header\">,\n \"title\"\n> & {\n /**\n * Page `h1`. A string is read-only; the object form enables inline editing\n * when it includes `onChange`.\n */\n title: PageHeaderTitle;\n /** Rendered before the title as `Breadcrumbs.Link` items. */\n breadcrumbs?: BreadcrumbsLinkProps[];\n /** Status chips rendered below the title. */\n chips?: ChipProps[];\n /** Full-width content below the title and actions. */\n description?: ReactNode;\n /**\n * Primary and secondary controls. Secondary actions overflow into More\n * actions at three items, or two alongside a primary; primary `items` make\n * that button a menu.\n */\n actions?: PageHeaderActionsProps;\n /** Settings-icon action. An `href` renders a link; otherwise it is a button. */\n preferenceAction?: PreferenceButtonProps | PreferenceLinkProps;\n /**\n * Header {@link LayoutProps}. Match `fluid` and `variant` to the `Layout`\n * inside `Page.Content`; omission uses the Layout defaults.\n */\n layout?: LayoutProps;\n};\n\n/**\n * Maps page header actions onto menu items. `Menu.Item` takes only a leading\n * icon, so a bare svg and the `{ after }` form are unwrapped to it and the\n * `{ before }` form is intentionally dropped. `ButtonProps` is a union, and\n * `Omit<ButtonProps, \"appearance\">` collapses it, which is why `icon` has to be\n * narrowed at runtime here.\n */\nconst renderMenuItems = (actions: PageHeaderActionProps[]) =>\n actions.map((action, index) => {\n const icon =\n typeof action.icon === \"function\"\n ? action.icon\n : action.icon && \"after\" in action.icon\n ? action.icon.after\n : undefined;\n return (\n <Menu.Item\n key={index}\n label={action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n icon={icon}\n className={action.className}\n />\n );\n });\n\n/**\n * Builds the trigger for a menu-opening primary action. `triggerProps` spreads\n * last on purpose: `Menu` supplies the trigger's `onClick`, `onKeyDown`, and\n * ARIA state, and spreading consumer props after them would clobber the menu's\n * own behavior. `icon` sits after `buttonProps` for the same reason in reverse:\n * the chevron is what signals that this button opens a menu, so it wins over a\n * consumer-supplied icon. A menu primary therefore cannot carry a leading icon.\n * `ref` lands last so nothing can displace it: `Menu` dismisses itself by\n * testing event paths against the invoker element, which only works if the ref\n * reaches the button.\n */\nconst renderPrimaryMenuTrigger =\n (primary: PageHeaderMenuActionProps) =>\n ({ ref, ...triggerProps }: MenuReturnProps) => {\n const { items: _items, label, ...buttonProps } = primary;\n return (\n <Button\n appearance=\"primary\"\n {...buttonProps}\n icon={{ after: IconKeyboardArrowDown }}\n {...triggerProps}\n ref={ref}\n >\n {label}\n </Button>\n );\n };\n\n/** Page heading with optional breadcrumbs, status, description, and actions. */\nexport const PageHeader = forwardRef(\n (props: PageHeaderProps, ref: Ref<HTMLHeadElement>) => {\n const {\n title: titleProp,\n breadcrumbs,\n chips,\n description,\n actions,\n preferenceAction,\n layout,\n className,\n ...rest\n } = props;\n\n const title: PageHeaderTitleConfig =\n typeof titleProp === \"string\" ? { text: titleProp } : titleProp;\n\n const [editing, setEditing] = useState(false);\n const [editingTitle, setEditingTitle] = useState<\n PageHeaderTitleConfig[\"text\"]\n >(title.text);\n const editFieldRef = useRef<HTMLInputElement>(null);\n const editButtonRef = useRef<HTMLButtonElement>(null);\n const firstRenderRef = useRef(true);\n\n useEffect(() => {\n if (firstRenderRef.current) {\n firstRenderRef.current = false;\n return;\n }\n\n if (editing === true && editFieldRef.current) {\n editFieldRef.current.focus();\n }\n\n if (editing === false && editButtonRef.current) {\n editButtonRef.current.focus();\n }\n }, [editing]);\n\n const { fluid, variant } = layout || {};\n\n const preferenceItem =\n preferenceAction &&\n (\"href\" in preferenceAction ? (\n <Tooltip>\n <Tooltip.Trigger>\n <ButtonLink\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceLinkProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ) : (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceButtonProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ));\n\n const secondaryActions = actions?.secondary ?? [];\n const primaryAction = actions?.primary;\n\n const collapseSecondary =\n secondaryActions.length >= 3 ||\n (secondaryActions.length >= 2 && !!primaryAction);\n\n const actionItems = actions && (\n <Flex justifyContent=\"flex-end\" className={styles.actions}>\n {collapseSecondary ? (\n <Menu\n trigger={({ ref, ...rest }) => (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"secondary\"\n icon={MoreVert}\n aria-label=\"More actions\"\n {...rest}\n ref={ref}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>More actions</Tooltip.Content>\n </Tooltip>\n )}\n >\n {renderMenuItems(secondaryActions)}\n </Menu>\n ) : (\n secondaryActions.map((action, index) => (\n <Button key={index} appearance=\"secondary\" {...action}>\n {action.label}\n </Button>\n ))\n )}\n\n {primaryAction &&\n (\"items\" in primaryAction ? (\n <Menu\n label={primaryAction.label}\n trigger={renderPrimaryMenuTrigger(primaryAction)}\n >\n {renderMenuItems(primaryAction.items)}\n </Menu>\n ) : (\n <Button appearance=\"primary\" {...primaryAction}>\n {primaryAction.label}\n </Button>\n ))}\n </Flex>\n );\n\n const headerClassName = cx(styles.content, styles.header, className);\n\n const headerContentClassName = cx(\n styles[\"content-inner\"],\n styles[\"content-header-inner\"],\n );\n\n return (\n <header ref={ref} className={headerClassName} {...rest}>\n <div className={headerContentClassName}>\n <Layout fluid={fluid} variant={variant} className={styles[\"layout\"]}>\n {breadcrumbs && (\n <Layout.Item>\n <Breadcrumbs>\n {breadcrumbs.map((breadcrumb, index) => (\n <Breadcrumbs.Link key={index} {...breadcrumb} />\n ))}\n </Breadcrumbs>\n </Layout.Item>\n )}\n\n <Layout.Item sm={2} md={actionItems || editing ? 6 : 12}>\n <div className={styles[\"title-wrapper\"]}>\n {title.onChange && editing ? (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n style={{ display: \"flex\" }}\n >\n <Flex alignItems=\"center\" grow={1} gap={2}>\n <TextField\n aria-label={title.editFieldLabel ?? \"Page title\"}\n defaultValue={title.text}\n flexGrow={1}\n ref={editFieldRef}\n onChange={(event) =>\n setEditingTitle(event.target.value)\n }\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.code === \"Escape\") {\n setEditing(false);\n setEditingTitle(title.text);\n }\n }}\n />\n\n <Flex alignItems=\"center\" gap={1}>\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Check}\n aria-label={\n title.confirmButtonLabel ?? \"Update title\"\n }\n size=\"small\"\n appearance=\"primary\"\n onClick={() => {\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.confirmButtonLabel ?? \"Update title\"}\n </Tooltip.Content>\n </Tooltip>\n\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Close}\n aria-label={title.cancelButtonLabel ?? \"Cancel\"}\n size=\"small\"\n onClick={() => {\n setEditing(false);\n setEditingTitle(title.text);\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.cancelButtonLabel ?? \"Cancel\"}\n </Tooltip.Content>\n </Tooltip>\n </Flex>\n </Flex>\n </form>\n ) : (\n <>\n <Text\n variant=\"headline\"\n size=\"large\"\n el=\"h1\"\n className={styles.title}\n >\n {title.text}\n </Text>\n\n {title.onChange != null ? (\n <>\n {\" \"}\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Edit}\n aria-label={title.editButtonLabel ?? \"Edit title\"}\n size=\"small\"\n appearance=\"ghost\"\n ref={editButtonRef}\n onClick={() => setEditing(true)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.editButtonLabel ?? \"Edit title\"}\n </Tooltip.Content>\n </Tooltip>\n </>\n ) : null}\n </>\n )}\n\n {preferenceItem}\n </div>\n\n {chips && (\n <Flex className={styles.chips}>\n {chips.map((chip, index) => (\n <Chip key={index} {...chip} />\n ))}\n </Flex>\n )}\n </Layout.Item>\n\n {actions && (\n <Layout.Item sm={2} md={6}>\n {actionItems}\n </Layout.Item>\n )}\n\n {description && (\n <Layout.Item md={12} className={styles.description}>\n {description}\n </Layout.Item>\n )}\n </Layout>\n </div>\n </header>\n );\n },\n);\n\nPageHeader.displayName = \"Page.Header\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n useRef,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\nimport { useMergeRefs } from \"../../../hooks\";\n\n/** @extends ComponentPropsWithoutRef<\"section\"> */\nexport type PageContentProps = ComponentPropsWithoutRef<\"section\">;\n\n/**\n * Main content section portaled into Page's landmark and shared desktop scroll\n * region. It renders in place outside Page and waits for the slot inside Page.\n */\nexport const PageContent = forwardRef(\n (props: PageContentProps, ref: Ref<HTMLElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx([styles[\"content\"]], className);\n const sectionRef = useRef<HTMLElement>(null);\n const mergedRef = useMergeRefs([sectionRef, ref]);\n\n const { contentWrapper } = useContext(PageContext);\n\n const section = (\n <section className={classNames} ref={mergedRef} {...rest}>\n <div className={styles[\"content-inner\"]}>{children}</div>\n </section>\n );\n\n if (contentWrapper) {\n return createPortal(section, contentWrapper);\n }\n\n if (contentWrapper === undefined) {\n return section;\n }\n\n return null;\n },\n);\n\nPageContent.displayName = \"PageContent\";\n","import { type RefObject, createContext } from \"react\";\n\nexport type PagePanelContextProps = {\n /** Header element measured to offset sticky content. */\n headerRef?: RefObject<HTMLElement>;\n};\n\nexport const PagePanelContext = createContext<PagePanelContextProps>({});\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PagePanelContext } from \"./internal/PagePanelContext\";\nimport { useMergeRefs } from \"../../../hooks\";\n\n/** @extends ComponentPropsWithoutRef<\"header\"> */\nexport type PagePanelHeaderProps = ComponentPropsWithoutRef<\"header\">;\n\n/**\n * Panel header pinned above its scrolling regions. Its measured height offsets\n * sticky Panel.Content regions.\n */\nexport const PagePanelHeader = forwardRef(\n (props: PagePanelHeaderProps, ref: Ref<HTMLElement>) => {\n const { className, children, ...rest } = props;\n const { headerRef } = useContext(PagePanelContext);\n const classNames = cx(styles[\"panel-header\"], className);\n\n return (\n <header\n className={classNames}\n data-anv=\"page-panel-header\"\n ref={useMergeRefs([ref, headerRef])}\n {...rest}\n >\n {children}\n </header>\n );\n },\n);\n\nPagePanelHeader.displayName = \"PagePanelHeader\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PagePanelContext } from \"./internal/PagePanelContext\";\n\n/** @extends ComponentPropsWithoutRef<\"div\"> */\nexport type PagePanelContentProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Pins this region below Panel.Header while the panel scrolls. Defaults to `false`. */\n sticky?: boolean;\n};\n\n/**\n * Panel content region. Sticky regions offset themselves by the current\n * Panel.Header height.\n */\nexport const PagePanelContent = forwardRef(\n (props: PagePanelContentProps, ref: Ref<HTMLDivElement>) => {\n const { className, children, sticky = false, style, ...rest } = props;\n const { headerRef } = useContext(PagePanelContext);\n const [headerHeight, setHeaderHeight] = useState(0);\n\n useEffect(() => {\n const headerElement = headerRef?.current;\n if (!sticky || !headerElement) return;\n\n const updateHeight = () => {\n setHeaderHeight(headerElement.offsetHeight || 0);\n };\n\n updateHeight();\n const resizeObserver = new ResizeObserver(updateHeight);\n resizeObserver.observe(headerElement);\n\n return () => resizeObserver.disconnect();\n }, [sticky, headerRef]);\n\n const contentClassNames = cx(styles[\"panel-content\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n const stickyStyle = sticky ? { top: `${headerHeight}px` } : undefined;\n\n return (\n <div\n className={contentClassNames}\n data-anv=\"page-panel-content\"\n ref={ref}\n style={{ ...stickyStyle, ...style }}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nPagePanelContent.displayName = \"PagePanelContent\";\n","import { type ComponentPropsWithoutRef, forwardRef, type Ref } from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\n\n/** @extends ComponentPropsWithoutRef<\"footer\"> */\nexport type PagePanelFooterProps = ComponentPropsWithoutRef<\"footer\"> & {\n /** Pins the footer to the bottom of the panel. Defaults to `false`. */\n sticky?: boolean;\n};\n\n/** Panel footer that right-aligns and wraps controls, with optional pinning. */\nexport const PagePanelFooter = forwardRef(\n (props: PagePanelFooterProps, ref: Ref<HTMLElement>) => {\n const { className, children, sticky = false, ...rest } = props;\n const classNames = cx(styles[\"panel-footer\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n return (\n <footer\n className={classNames}\n data-anv=\"page-panel-footer\"\n ref={ref}\n {...rest}\n >\n {children}\n </footer>\n );\n },\n);\n\nPagePanelFooter.displayName = \"PagePanelFooter\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n useEffect,\n useLayoutEffect,\n useState,\n useMemo,\n type CSSProperties,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport Dialog from \"../../../components/Dialog\";\nimport { PageContext, type PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\nimport {\n DrillDownContext,\n type DrillDownContextProps,\n} from \"../../../components/DrillDown/internal/DrillDownContext\";\nimport { useDrillDownContextState } from \"../../../components/DrillDown/internal/useDrillDownContextState\";\nimport drillDownStyles from \"../../../components/DrillDown/DrillDown.module.scss\";\nimport { useDrillDownContext } from \"../../../components/DrillDown/internal/useDrillDownContext\";\nimport { PagePanelHeader } from \"./PagePanelHeader\";\nimport { PagePanelContent } from \"./PagePanelContent\";\nimport { PagePanelFooter } from \"./PagePanelFooter\";\nimport { PagePanelContext } from \"./internal/PagePanelContext\";\n\n/** @extends ComponentPropsWithoutRef<\"div\"> */\nexport type PagePanelProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Controlled visibility. Omit for a persistent desktop-style panel.\n */\n open?: boolean;\n /** Width preset. Defaults to `\"medium\"`. */\n size?: \"small\" | \"medium\" | \"large\";\n /** Removes the panel's inner padding. Defaults to `false`. */\n noPadding?: boolean;\n /** Initial DrillDown index for uncontrolled navigation within the panel. */\n defaultDrillDownIndex?: DrillDownContextProps[\"index\"];\n /** Exposes the panel's DrillDown context to an external `useDrillDown` host. */\n onDrillDownContextChange?: (context: DrillDownContextProps) => void;\n};\n\nconst PagePanelInner = ({\n style,\n open,\n hostedInDialog,\n children,\n}: {\n style?: CSSProperties;\n open?: boolean;\n /**\n * The mobile Dialog owns scrolling and focus, so this wrapper must not add a\n * competing scroll region or tab stop.\n */\n hostedInDialog?: boolean;\n children?: React.ReactNode;\n}) => {\n const { index } = useDrillDownContext();\n\n const classNames = cx([styles[\"panel-inner\"]], {\n [styles[\"drilldown-open\"]]: index !== undefined,\n });\n\n return (\n <div\n className={classNames}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={\n hostedInDialog\n ? undefined\n : typeof open !== \"undefined\" && open\n ? 0\n : -1\n }\n style={{\n ...style,\n ...(hostedInDialog\n ? {}\n : { overflowY: index === undefined ? \"auto\" : \"hidden\" }),\n }}\n >\n {children}\n </div>\n );\n};\n\n/**\n * Desktop side panel with DrillDown context and a pinned header; Content and\n * Footer can opt into sticky positioning. Omit `open` for a persistent panel;\n * a controlled panel becomes a Dialog on smaller pages.\n */\nexport const PagePanel = Object.assign(\n forwardRef((props: PagePanelProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n open,\n size = \"medium\",\n noPadding,\n style,\n className,\n defaultDrillDownIndex,\n onDrillDownContextChange,\n ...rest\n } = props;\n const [isMobile, setIsMobile] = useState<boolean>(false);\n const headerRef = useRef<HTMLElement>(null);\n\n const classNames = cx(\n [styles.panel, drillDownStyles.panel],\n [styles[size]],\n className,\n {\n [styles[\"open\"]]: typeof open === \"undefined\" ? true : open,\n [styles[\"persistent\"]]: typeof open === \"undefined\",\n [styles[\"noPadding\"]]: noPadding,\n },\n );\n\n const drillDownContextValue = useDrillDownContextState({\n defaultDrillDownIndex,\n });\n\n const drillDownContextProviderValue = useMemo(\n () => ({\n ...drillDownContextValue,\n hostIsInteractive: open !== false,\n }),\n [drillDownContextValue, open],\n );\n\n useLayoutEffect(() => {\n onDrillDownContextChange?.(drillDownContextProviderValue);\n }, [drillDownContextProviderValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n const previousOpenRef = useRef(open);\n\n useEffect(() => {\n if (isMobile) {\n previousOpenRef.current = open;\n return;\n }\n\n if (previousOpenRef.current && open === false) {\n drillDownContextValue.onHostClose?.();\n drillDownContextValue.onHostClosed?.();\n }\n\n previousOpenRef.current = open;\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n if (isMobile || !open || previousOpenRef.current) {\n return;\n }\n\n drillDownContextValue.setHostTrigger?.(\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null,\n );\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n if (typeof open !== \"undefined\" && isMobile) {\n return (\n <Dialog\n open={open}\n defaultDrillDownIndex={defaultDrillDownIndex}\n onDrillDownContextChange={onDrillDownContextChange}\n >\n <Dialog.Content>\n <PagePanelContext.Provider value={{ headerRef }}>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <PagePanelInner style={style} open={open} hostedInDialog>\n {children}\n </PagePanelInner>\n </div>\n </PagePanelContext.Provider>\n </Dialog.Content>\n </Dialog>\n );\n }\n return (\n <DrillDownContext.Provider value={drillDownContextProviderValue}>\n <PagePanelContext.Provider value={{ headerRef }}>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <PagePanelInner style={style} open={open}>\n {children}\n </PagePanelInner>\n </div>\n </PagePanelContext.Provider>\n </DrillDownContext.Provider>\n );\n }),\n {\n /** Header pinned above the panel's scrolling regions. */\n Header: PagePanelHeader,\n /** Content region that can pin below the measured panel header. */\n Content: PagePanelContent,\n /** Footer action region that can pin to the bottom of the panel. */\n Footer: PagePanelFooter,\n },\n);\n\nPagePanel.displayName = \"PagePanel\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport type { LayoutUtilProps } from \"../../../types\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\n\n/**\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type PageFooterProps = ComponentPropsWithoutRef<\"div\"> & LayoutUtilProps;\n\n/**\n * Footer landmark portaled into Page's footer slot. It renders in place outside\n * Page and waits for the slot inside Page.\n */\nexport const PageFooter = forwardRef(\n (props: PageFooterProps, ref: Ref<HTMLDivElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n const { footerSlot } = useContext(PageContext);\n\n const classNames = cx([styles[\"content-footer\"]], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const footer = (\n <footer className={classNames} ref={ref} style={styleCombined} {...rest}>\n {children}\n </footer>\n );\n\n if (footerSlot) {\n return createPortal(footer, footerSlot);\n }\n\n if (footerSlot === undefined) {\n return footer;\n }\n\n return null;\n },\n);\nPageFooter.displayName = \"PageFooter\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSidebar } from \"./PageSidebar\";\nimport { PageSidebarHeader } from \"./PageSidebarHeader\";\nimport { PageHeader } from \"./PageHeader\";\nimport { PageContent } from \"./PageContent\";\nimport { PagePanel } from \"./PagePanel\";\nimport { PageFooter } from \"./PageFooter\";\nimport { PageContext } from \"./PageContext\";\nimport { isPageContentScrollContainerActive } from \"./pageBreakpoint\";\nimport { useMergeRefs } from \"../../../hooks\";\n\n/**\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * Full-page shell with optional Sidebar, Header, Content, Panel, and Footer\n * regions. Content and Footer portal into the shell's main and footer slots.\n */\nexport const Page = Object.assign(\n forwardRef<HTMLDivElement, PageProps>(function PageInner(props, ref) {\n const { children, className, ...rest } = props;\n const classNames = cx(styles[\"page\"], className);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n\n const [pageWidth, setPageWidth] = useState<number>(0);\n const [contentWrapper, setContentWrapper] = useState<HTMLElement | null>(\n null,\n );\n const [footerSlot, setFooterSlot] = useState<HTMLElement | null>(null);\n\n // Ignore transient null refs during subtree teardown; storing null would\n // rerender Page mid-detach and loop. Both slots share Page's lifetime.\n const contentWrapperRef = useCallback((node: HTMLElement | null) => {\n setContentWrapper((prev) => (node && node !== prev ? node : prev));\n }, []);\n const footerSlotRef = useCallback((node: HTMLElement | null) => {\n setFooterSlot((prev) => (node && node !== prev ? node : prev));\n }, []);\n\n useLayoutEffect(() => {\n const element = elRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPageWidth(entry.contentRect.width);\n }\n });\n if (element) {\n resizeObserver.observe(element);\n }\n return () => resizeObserver.disconnect();\n }, [elRef]);\n\n const contextValue = useMemo(\n () => ({ pageWidth, contentWrapper, footerSlot }),\n [pageWidth, contentWrapper, footerSlot],\n );\n\n return (\n <PageContext.Provider value={contextValue}>\n <div className={classNames} data-anv=\"Page\" ref={combinedRef} {...rest}>\n <div className={styles[\"container\"]}>\n {children}\n <main\n className={styles[\"content-wrapper\"]}\n ref={contentWrapperRef}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- makes the native overflow:auto scroll region keyboard-operable (Page Up/Page Down) at the desktop breakpoint, where CSS turns this wrapper into an independently-scrolling container regardless of whether its content currently overflows */\n tabIndex={\n isPageContentScrollContainerActive(pageWidth) ? 0 : undefined\n }\n />\n <div className={styles[\"footer-slot\"]} ref={footerSlotRef} />\n </div>\n </div>\n </PageContext.Provider>\n );\n }),\n {\n /** Collapsible desktop sidebar that becomes a popover on smaller pages. */\n Sidebar: PageSidebar,\n /** Sidebar heading region hidden from accessibility when collapsed. */\n SidebarHeader: PageSidebarHeader,\n /** Page heading, breadcrumbs, status, description, and actions. */\n Header: PageHeader,\n /** Section portaled into Page's main landmark. */\n Content: PageContent,\n /** Omit `open` for a persistent panel; a controlled panel becomes a Dialog on smaller pages. */\n Panel: PagePanel,\n /** Footer portaled into Page's footer slot. */\n Footer: PageFooter,\n },\n);\nPage.displayName = \"Page\";\n"],"names":["core.primitive?.BreakpointLg","props","SegmentSVG","RespClose","RespOpen","OpenSVG","CloseSVG","IconKeyboardArrowDown","LocalSettings","ref","rest","MoreVert","Check","Close","Edit"],"mappings":"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"}
1
+ {"version":3,"file":"Page-ZSHNJs7z.js","sources":["../src/beta/components/Page/PageSidebarContext.ts","../src/beta/components/Page/PageContext.ts","../src/beta/components/Page/pageBreakpoint.ts","../src/beta/components/Page/PageSidebar.tsx","../src/beta/components/Page/PageSidebarHeader.tsx","../src/beta/components/Page/PageHeader.tsx","../src/beta/components/Page/PageContent.tsx","../src/beta/components/Page/internal/PagePanelContext.tsx","../src/beta/components/Page/PagePanelHeader.tsx","../src/beta/components/Page/PagePanelContent.tsx","../src/beta/components/Page/PagePanelFooter.tsx","../src/beta/components/Page/PagePanel.tsx","../src/beta/components/Page/PageFooter.tsx","../src/beta/components/Page/Page.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\ntype PageSideBarContextProps = {\n collapsed: boolean;\n};\n\nexport const PageSideBarContext = createContext<PageSideBarContextProps | null>(\n null,\n);\n","import { createContext } from \"react\";\n\nexport const PageContext = createContext<PageContextProps>({});\n\nexport type PageContextProps = {\n /** Observed width of the Page root; undefined outside Page. */\n pageWidth?: number;\n /**\n * Main portal target. Undefined outside Page renders Content in place; null\n * inside Page renders nothing until the slot mounts.\n */\n contentWrapper?: HTMLElement | null;\n /**\n * Footer portal target. Undefined outside Page renders Footer in place; null\n * inside Page renders nothing until the slot mounts.\n */\n footerSlot?: HTMLElement | null;\n};\n","import { core } from \"@servicetitan/hammer-token\";\n\n/**\n * Shared Page boundary between the adaptive and desktop layouts. Parsing once\n * keeps Sidebar, Panel, and Content decisions aligned.\n */\nexport const PAGE_LG_BREAKPOINT = +(\n core.primitive?.BreakpointLg?.value?.replace(\"px\", \"\") ?? 0\n);\n\n/** Whether the page width uses the adaptive Sidebar and Panel forms. */\nexport const isPageMobileWidth = (pageWidth: number | undefined): boolean =>\n (pageWidth ?? 0) < PAGE_LG_BREAKPOINT;\n\n/**\n * Whether Page's main landmark is an independent keyboard-focusable scroll\n * region. Requires a parsed breakpoint and a measured desktop width.\n */\nexport const isPageContentScrollContainerActive = (\n pageWidth: number | undefined,\n): boolean => PAGE_LG_BREAKPOINT > 0 && (pageWidth ?? 0) >= PAGE_LG_BREAKPOINT;\n","import { Button, Icon, Flex, Tooltip } from \"../../../components\";\nimport { Popover } from \"../../../internal/components/Popover\";\nimport { usePopoverContext } from \"../../../internal/components/Popover/internal/usePopoverContext\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n type Ref,\n useContext,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../../hooks\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport SegmentSVG from \"@servicetitan/hammer-icon/mdi/round/segment.svg\";\nimport RespOpen from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport RespClose from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport OpenSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport CloseSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_left.svg\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\nimport { PageContext, type PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\n\nfunction AdaptiveSidebarContent({\n children,\n className,\n innerRef,\n}: {\n children: ReactNode;\n className?: string;\n innerRef?: Ref<HTMLDivElement>;\n}) {\n const { closePopover, openState } = usePopoverContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([containerRef, innerRef]);\n\n useEffect(() => {\n if (!openState) return;\n const overflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = overflow;\n };\n }, [openState]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const handleClick = (e: Event) => {\n if (!(e.target instanceof Element)) return;\n if (e.target.closest(\"a\")) closePopover();\n };\n el.addEventListener(\"click\", handleClick);\n return () => el.removeEventListener(\"click\", handleClick);\n }, [closePopover]);\n\n return (\n <Flex direction=\"column\" className={className} ref={mergedRef}>\n {children}\n </Flex>\n );\n}\n\n/**\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Persists desktop collapsed state under this localStorage key. Defaults to `\"sidebar-collapsed\"`. */\n localStorageKey?: string;\n /** Overrides the generated tracking ID on the desktop toggle button. */\n [\"data-tracking-id\"]?: string;\n /** Smaller-page trigger text. Defaults to `\"Menu\"`. */\n currentPageTitle?: string;\n};\n\n/**\n * Collapsible desktop sidebar with persisted state. On smaller pages it\n * becomes a popover whose trigger shows `currentPageTitle`.\n */\nexport const PageSidebar = forwardRef(\n (props: PageSidebarProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n className,\n currentPageTitle,\n localStorageKey = \"sidebar-collapsed\",\n ...rest\n } = props;\n\n const data = {\n localStorageKey,\n };\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n\n const [isMobile, setIsMobile] = useState<boolean>(() =>\n typeof window !== \"undefined\"\n ? isPageMobileWidth(window.innerWidth)\n : false,\n );\n\n useLayoutEffect(() => {\n if (!pageWidth) return;\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n const trackingId = useTrackingId({\n name: \"PageSidebarButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n const sidebarState = localStorage.getItem(localStorageKey);\n return sidebarState ? JSON.parse(sidebarState) : false;\n });\n const classNames = cx([styles[\"sidebar\"]], className, {\n [styles[\"collapsed\"]]: collapsed,\n });\n const onToggleButtonClick = () => {\n setCollapsed((prev) => {\n localStorage.setItem(localStorageKey, JSON.stringify(!prev));\n return !prev;\n });\n };\n\n if (isMobile) {\n return (\n <Popover fillAvailableHeight matchReferenceWidth noPadding>\n <Popover.Trigger>\n {(props) => {\n return (\n <div className={styles[\"sidebar-adaptive-trigger-container\"]}>\n <Button\n className={styles[\"sidebar-adaptive-trigger\"]}\n icon={SegmentSVG}\n appearance=\"ghost\"\n {...props}\n >\n {!currentPageTitle ? \"Menu\" : currentPageTitle}\n <Icon\n className={styles[\"sidebar-adaptive-trigger-icon\"]}\n justifyContent=\"end\"\n svg={\n props[\"data-state\"] === \"open\" ? RespClose : RespOpen\n }\n />\n </Button>\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content className={styles[\"sidebar-adaptive-container\"]}>\n <AdaptiveSidebarContent\n className={styles[\"sidebar-adaptive\"]}\n innerRef={ref}\n >\n {children}\n </AdaptiveSidebarContent>\n </Popover.Content>\n </Popover>\n );\n }\n\n return (\n <PageSideBarContext.Provider value={{ collapsed }}>\n <div className={classNames} ref={ref} {...rest}>\n <div className={styles[\"sidebar-inner\"]} aria-hidden={collapsed}>\n <div>{children}</div>\n </div>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Tooltip placement=\"right\">\n <Tooltip.Trigger className={styles[\"toggle-button-tooltip\"]}>\n <Button\n size=\"small\"\n onClick={onToggleButtonClick}\n className={styles[\"toggle-button\"]}\n aria-label={collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n data-tracking-id={trackingId}\n icon={collapsed ? OpenSVG : CloseSVG}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n </Tooltip.Content>\n </Tooltip>\n </div>\n </div>\n </PageSideBarContext.Provider>\n );\n },\n);\n\nPageSidebar.displayName = \"Page.Sidebar\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\n\n/** @extends ComponentPropsWithoutRef<\"div\"> */\nexport type PageSidebarHeaderProps = ComponentPropsWithoutRef<\"div\">;\n\n/** Sidebar heading region hidden from accessibility when the sidebar collapses. */\nexport const PageSidebarHeader = forwardRef(\n (props: PageSidebarHeaderProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const context = useContext(PageSideBarContext);\n const classNames = cx([styles[\"sidebar-header\"]], className);\n\n return (\n <div className={classNames} ref={ref} {...rest}>\n <div\n className={styles[\"header-content\"]}\n aria-hidden={context?.collapsed}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nPageSidebarHeader.displayName = \"Page.SidebarHeader\";\n","import {\n type ButtonProps,\n type ButtonLinkProps,\n type BreadcrumbsLinkProps,\n type ChipProps,\n type MenuReturnProps,\n Tooltip,\n ButtonLink,\n Button,\n Flex,\n Menu,\n Breadcrumbs,\n Chip,\n Text,\n TextField,\n} from \"../../../components\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n type Ref,\n useState,\n useRef,\n useEffect,\n type KeyboardEvent,\n} from \"react\";\nimport Layout, { type LayoutProps } from \"../../../components/Layout\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport LocalSettings from \"@servicetitan/hammer-icon/mdi/round/settings.svg\";\nimport MoreVert from \"@servicetitan/hammer-icon/mdi/round/more_vert.svg\";\nimport Edit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport IconKeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\n\ntype PageHeaderActionProps = Omit<ButtonProps, \"appearance\"> & {\n /** Visible button text, or menu-item text when nested under `items`. */\n label: string;\n};\n\n/**\n * Props for a page header action that opens a menu instead of invoking a single\n * handler. `onClick` is omitted because the whole button opens the menu -- an\n * action carrying both a handler and items would be a split button, which\n * Anvil does not support.\n */\ntype PageHeaderMenuActionProps = Omit<PageHeaderActionProps, \"onClick\"> & {\n /** Replaces a direct click handler with a menu opened by the primary button. */\n items: PageHeaderActionProps[];\n};\n\ntype PageHeaderActionsProps = {\n /**\n * Primary action button. Pass `items` instead of `onClick` to render a\n * primary button that opens a menu of actions.\n */\n primary?: PageHeaderActionProps | PageHeaderMenuActionProps;\n /**\n * Secondary buttons. Three or more, or two alongside a primary action,\n * collapse into a More actions menu.\n */\n secondary?: PageHeaderActionProps[];\n};\n\ntype BasePreferenceProps = {\n /** Names the icon-only control and supplies its tooltip text. */\n \"aria-label\": string;\n};\n\ntype PreferenceButtonProps = Omit<\n ButtonProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\ntype PreferenceLinkProps = Omit<\n ButtonLinkProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\ntype PageHeaderTitleConfig = {\n /** Rendered in the page's `h1` and used to initialize the edit field. */\n text: string;\n /**\n * Makes the title editable. Return `false` to keep the editor open after\n * submit or confirmation.\n */\n onChange?: (title: string) => void | boolean;\n /** Accessible name and tooltip for entering edit mode. Defaults to `\"Edit title\"`. */\n editButtonLabel?: string;\n /** Accessible name for the title field. Defaults to `\"Page title\"`. */\n editFieldLabel?: string;\n /** Accessible name and tooltip for confirmation. Defaults to `\"Update title\"`. */\n confirmButtonLabel?: string;\n /** Accessible name and tooltip for cancellation. Defaults to `\"Cancel\"`. */\n cancelButtonLabel?: string;\n};\n\ntype PageHeaderTitle = PageHeaderTitleConfig[\"text\"] | PageHeaderTitleConfig;\n\n/** @extends Omit<ComponentPropsWithoutRef<\"header\">, \"title\"> */\nexport type PageHeaderProps = Omit<\n ComponentPropsWithoutRef<\"header\">,\n \"title\"\n> & {\n /**\n * Page `h1`. A string is read-only; the object form enables inline editing\n * when it includes `onChange`.\n */\n title: PageHeaderTitle;\n /** Rendered before the title as `Breadcrumbs.Link` items. */\n breadcrumbs?: BreadcrumbsLinkProps[];\n /** Status chips rendered below the title. */\n chips?: ChipProps[];\n /** Full-width content below the title and actions. */\n description?: ReactNode;\n /**\n * Primary and secondary controls. Secondary actions overflow into More\n * actions at three items, or two alongside a primary; primary `items` make\n * that button a menu.\n */\n actions?: PageHeaderActionsProps;\n /** Settings-icon action. An `href` renders a link; otherwise it is a button. */\n preferenceAction?: PreferenceButtonProps | PreferenceLinkProps;\n /**\n * Header {@link LayoutProps}. Match `fluid` and `variant` to the `Layout`\n * inside `Page.Content`; omission uses the Layout defaults.\n */\n layout?: LayoutProps;\n};\n\n/**\n * Maps page header actions onto menu items. `Menu.Item` takes only a leading\n * icon, so a bare svg and the `{ after }` form are unwrapped to it and the\n * `{ before }` form is intentionally dropped. `ButtonProps` is a union, and\n * `Omit<ButtonProps, \"appearance\">` collapses it, which is why `icon` has to be\n * narrowed at runtime here.\n */\nconst renderMenuItems = (actions: PageHeaderActionProps[]) =>\n actions.map((action, index) => {\n const icon =\n typeof action.icon === \"function\"\n ? action.icon\n : action.icon && \"after\" in action.icon\n ? action.icon.after\n : undefined;\n return (\n <Menu.Item\n key={index}\n label={action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n icon={icon}\n className={action.className}\n />\n );\n });\n\n/**\n * Builds the trigger for a menu-opening primary action. `triggerProps` spreads\n * last on purpose: `Menu` supplies the trigger's `onClick`, `onKeyDown`, and\n * ARIA state, and spreading consumer props after them would clobber the menu's\n * own behavior. `icon` sits after `buttonProps` for the same reason in reverse:\n * the chevron is what signals that this button opens a menu, so it wins over a\n * consumer-supplied icon. A menu primary therefore cannot carry a leading icon.\n * `ref` lands last so nothing can displace it: `Menu` dismisses itself by\n * testing event paths against the invoker element, which only works if the ref\n * reaches the button.\n */\nconst renderPrimaryMenuTrigger =\n (primary: PageHeaderMenuActionProps) =>\n ({ ref, ...triggerProps }: MenuReturnProps) => {\n const { items: _items, label, ...buttonProps } = primary;\n return (\n <Button\n appearance=\"primary\"\n {...buttonProps}\n icon={{ after: IconKeyboardArrowDown }}\n {...triggerProps}\n ref={ref}\n >\n {label}\n </Button>\n );\n };\n\n/** Page heading with optional breadcrumbs, status, description, and actions. */\nexport const PageHeader = forwardRef(\n (props: PageHeaderProps, ref: Ref<HTMLHeadElement>) => {\n const {\n title: titleProp,\n breadcrumbs,\n chips,\n description,\n actions,\n preferenceAction,\n layout,\n className,\n ...rest\n } = props;\n\n const title: PageHeaderTitleConfig =\n typeof titleProp === \"string\" ? { text: titleProp } : titleProp;\n\n const [editing, setEditing] = useState(false);\n const [editingTitle, setEditingTitle] = useState<\n PageHeaderTitleConfig[\"text\"]\n >(title.text);\n const editFieldRef = useRef<HTMLInputElement>(null);\n const editButtonRef = useRef<HTMLButtonElement>(null);\n const firstRenderRef = useRef(true);\n\n useEffect(() => {\n if (firstRenderRef.current) {\n firstRenderRef.current = false;\n return;\n }\n\n if (editing === true && editFieldRef.current) {\n editFieldRef.current.focus();\n }\n\n if (editing === false && editButtonRef.current) {\n editButtonRef.current.focus();\n }\n }, [editing]);\n\n const { fluid, variant } = layout || {};\n\n const preferenceItem =\n preferenceAction &&\n (\"href\" in preferenceAction ? (\n <Tooltip>\n <Tooltip.Trigger>\n <ButtonLink\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceLinkProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ) : (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceButtonProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ));\n\n const secondaryActions = actions?.secondary ?? [];\n const primaryAction = actions?.primary;\n\n const collapseSecondary =\n secondaryActions.length >= 3 ||\n (secondaryActions.length >= 2 && !!primaryAction);\n\n const actionItems = actions && (\n <Flex justifyContent=\"flex-end\" className={styles.actions}>\n {collapseSecondary ? (\n <Menu\n trigger={({ ref, ...rest }) => (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"secondary\"\n icon={MoreVert}\n aria-label=\"More actions\"\n {...rest}\n ref={ref}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>More actions</Tooltip.Content>\n </Tooltip>\n )}\n >\n {renderMenuItems(secondaryActions)}\n </Menu>\n ) : (\n secondaryActions.map((action, index) => (\n <Button key={index} appearance=\"secondary\" {...action}>\n {action.label}\n </Button>\n ))\n )}\n\n {primaryAction &&\n (\"items\" in primaryAction ? (\n <Menu\n label={primaryAction.label}\n trigger={renderPrimaryMenuTrigger(primaryAction)}\n >\n {renderMenuItems(primaryAction.items)}\n </Menu>\n ) : (\n <Button appearance=\"primary\" {...primaryAction}>\n {primaryAction.label}\n </Button>\n ))}\n </Flex>\n );\n\n const headerClassName = cx(styles.content, styles.header, className);\n\n const headerContentClassName = cx(\n styles[\"content-inner\"],\n styles[\"content-header-inner\"],\n );\n\n return (\n <header ref={ref} className={headerClassName} {...rest}>\n <div className={headerContentClassName}>\n <Layout fluid={fluid} variant={variant} className={styles[\"layout\"]}>\n {breadcrumbs && (\n <Layout.Item>\n <Breadcrumbs>\n {breadcrumbs.map((breadcrumb, index) => (\n <Breadcrumbs.Link key={index} {...breadcrumb} />\n ))}\n </Breadcrumbs>\n </Layout.Item>\n )}\n\n <Layout.Item sm={2} md={actionItems || editing ? 6 : 12}>\n <div className={styles[\"title-wrapper\"]}>\n {title.onChange && editing ? (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n style={{ display: \"flex\" }}\n >\n <Flex alignItems=\"center\" grow={1} gap={2}>\n <TextField\n aria-label={title.editFieldLabel ?? \"Page title\"}\n defaultValue={title.text}\n flexGrow={1}\n ref={editFieldRef}\n onChange={(event) =>\n setEditingTitle(event.target.value)\n }\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.code === \"Escape\") {\n setEditing(false);\n setEditingTitle(title.text);\n }\n }}\n />\n\n <Flex alignItems=\"center\" gap={1}>\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Check}\n aria-label={\n title.confirmButtonLabel ?? \"Update title\"\n }\n size=\"small\"\n appearance=\"primary\"\n onClick={() => {\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.confirmButtonLabel ?? \"Update title\"}\n </Tooltip.Content>\n </Tooltip>\n\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Close}\n aria-label={title.cancelButtonLabel ?? \"Cancel\"}\n size=\"small\"\n onClick={() => {\n setEditing(false);\n setEditingTitle(title.text);\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.cancelButtonLabel ?? \"Cancel\"}\n </Tooltip.Content>\n </Tooltip>\n </Flex>\n </Flex>\n </form>\n ) : (\n <>\n <Text\n variant=\"headline\"\n size=\"large\"\n el=\"h1\"\n className={styles.title}\n >\n {title.text}\n </Text>\n\n {title.onChange != null ? (\n <>\n {\" \"}\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Edit}\n aria-label={title.editButtonLabel ?? \"Edit title\"}\n size=\"small\"\n appearance=\"ghost\"\n ref={editButtonRef}\n onClick={() => setEditing(true)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.editButtonLabel ?? \"Edit title\"}\n </Tooltip.Content>\n </Tooltip>\n </>\n ) : null}\n </>\n )}\n\n {preferenceItem}\n </div>\n\n {chips && (\n <Flex className={styles.chips}>\n {chips.map((chip, index) => (\n <Chip key={index} {...chip} />\n ))}\n </Flex>\n )}\n </Layout.Item>\n\n {actions && (\n <Layout.Item sm={2} md={6}>\n {actionItems}\n </Layout.Item>\n )}\n\n {description && (\n <Layout.Item md={12} className={styles.description}>\n {description}\n </Layout.Item>\n )}\n </Layout>\n </div>\n </header>\n );\n },\n);\n\nPageHeader.displayName = \"Page.Header\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n useRef,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\nimport { useMergeRefs } from \"../../../hooks\";\n\n/** @extends ComponentPropsWithoutRef<\"section\"> */\nexport type PageContentProps = ComponentPropsWithoutRef<\"section\">;\n\n/**\n * Main content section portaled into Page's landmark and shared desktop scroll\n * region. It renders in place outside Page and waits for the slot inside Page.\n */\nexport const PageContent = forwardRef(\n (props: PageContentProps, ref: Ref<HTMLElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx([styles[\"content\"]], className);\n const sectionRef = useRef<HTMLElement>(null);\n const mergedRef = useMergeRefs([sectionRef, ref]);\n\n const { contentWrapper } = useContext(PageContext);\n\n const section = (\n <section className={classNames} ref={mergedRef} {...rest}>\n <div className={styles[\"content-inner\"]}>{children}</div>\n </section>\n );\n\n if (contentWrapper) {\n return createPortal(section, contentWrapper);\n }\n\n if (contentWrapper === undefined) {\n return section;\n }\n\n return null;\n },\n);\n\nPageContent.displayName = \"PageContent\";\n","import { type RefObject, createContext } from \"react\";\n\nexport type PagePanelContextProps = {\n /** Header element measured to offset sticky content. */\n headerRef?: RefObject<HTMLElement>;\n};\n\nexport const PagePanelContext = createContext<PagePanelContextProps>({});\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PagePanelContext } from \"./internal/PagePanelContext\";\nimport { useMergeRefs } from \"../../../hooks\";\n\n/** @extends ComponentPropsWithoutRef<\"header\"> */\nexport type PagePanelHeaderProps = ComponentPropsWithoutRef<\"header\">;\n\n/**\n * Panel header pinned above its scrolling regions. Its measured height offsets\n * sticky Panel.Content regions.\n */\nexport const PagePanelHeader = forwardRef(\n (props: PagePanelHeaderProps, ref: Ref<HTMLElement>) => {\n const { className, children, ...rest } = props;\n const { headerRef } = useContext(PagePanelContext);\n const classNames = cx(styles[\"panel-header\"], className);\n\n return (\n <header\n className={classNames}\n data-anv=\"page-panel-header\"\n ref={useMergeRefs([ref, headerRef])}\n {...rest}\n >\n {children}\n </header>\n );\n },\n);\n\nPagePanelHeader.displayName = \"PagePanelHeader\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PagePanelContext } from \"./internal/PagePanelContext\";\n\n/** @extends ComponentPropsWithoutRef<\"div\"> */\nexport type PagePanelContentProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Pins this region below Panel.Header while the panel scrolls. Defaults to `false`. */\n sticky?: boolean;\n};\n\n/**\n * Panel content region. Sticky regions offset themselves by the current\n * Panel.Header height.\n */\nexport const PagePanelContent = forwardRef(\n (props: PagePanelContentProps, ref: Ref<HTMLDivElement>) => {\n const { className, children, sticky = false, style, ...rest } = props;\n const { headerRef } = useContext(PagePanelContext);\n const [headerHeight, setHeaderHeight] = useState(0);\n\n useEffect(() => {\n const headerElement = headerRef?.current;\n if (!sticky || !headerElement) return;\n\n const updateHeight = () => {\n setHeaderHeight(headerElement.offsetHeight || 0);\n };\n\n updateHeight();\n const resizeObserver = new ResizeObserver(updateHeight);\n resizeObserver.observe(headerElement);\n\n return () => resizeObserver.disconnect();\n }, [sticky, headerRef]);\n\n const contentClassNames = cx(styles[\"panel-content\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n const stickyStyle = sticky ? { top: `${headerHeight}px` } : undefined;\n\n return (\n <div\n className={contentClassNames}\n data-anv=\"page-panel-content\"\n ref={ref}\n style={{ ...stickyStyle, ...style }}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nPagePanelContent.displayName = \"PagePanelContent\";\n","import { type ComponentPropsWithoutRef, forwardRef, type Ref } from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\n\n/** @extends ComponentPropsWithoutRef<\"footer\"> */\nexport type PagePanelFooterProps = ComponentPropsWithoutRef<\"footer\"> & {\n /** Pins the footer to the bottom of the panel. Defaults to `false`. */\n sticky?: boolean;\n};\n\n/** Panel footer that right-aligns and wraps controls, with optional pinning. */\nexport const PagePanelFooter = forwardRef(\n (props: PagePanelFooterProps, ref: Ref<HTMLElement>) => {\n const { className, children, sticky = false, ...rest } = props;\n const classNames = cx(styles[\"panel-footer\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n return (\n <footer\n className={classNames}\n data-anv=\"page-panel-footer\"\n ref={ref}\n {...rest}\n >\n {children}\n </footer>\n );\n },\n);\n\nPagePanelFooter.displayName = \"PagePanelFooter\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n useEffect,\n useLayoutEffect,\n useState,\n useMemo,\n type CSSProperties,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport Dialog from \"../../../components/Dialog\";\nimport { PageContext, type PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\nimport {\n DrillDownContext,\n type DrillDownContextProps,\n} from \"../../../components/DrillDown/internal/DrillDownContext\";\nimport { useDrillDownContextState } from \"../../../components/DrillDown/internal/useDrillDownContextState\";\nimport drillDownStyles from \"../../../components/DrillDown/DrillDown.module.scss\";\nimport { useDrillDownContext } from \"../../../components/DrillDown/internal/useDrillDownContext\";\nimport { PagePanelHeader } from \"./PagePanelHeader\";\nimport { PagePanelContent } from \"./PagePanelContent\";\nimport { PagePanelFooter } from \"./PagePanelFooter\";\nimport { PagePanelContext } from \"./internal/PagePanelContext\";\n\n/** @extends ComponentPropsWithoutRef<\"div\"> */\nexport type PagePanelProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Controlled visibility. Omit for a persistent desktop-style panel.\n */\n open?: boolean;\n /** Width preset. Defaults to `\"medium\"`. */\n size?: \"small\" | \"medium\" | \"large\";\n /** Removes the panel's inner padding. Defaults to `false`. */\n noPadding?: boolean;\n /** Initial DrillDown index for uncontrolled navigation within the panel. */\n defaultDrillDownIndex?: DrillDownContextProps[\"index\"];\n /** Exposes the panel's DrillDown context to an external `useDrillDown` host. */\n onDrillDownContextChange?: (context: DrillDownContextProps) => void;\n};\n\nconst PagePanelInner = ({\n style,\n open,\n hostedInDialog,\n children,\n}: {\n style?: CSSProperties;\n open?: boolean;\n /**\n * The mobile Dialog owns scrolling and focus, so this wrapper must not add a\n * competing scroll region or tab stop.\n */\n hostedInDialog?: boolean;\n children?: React.ReactNode;\n}) => {\n const { index } = useDrillDownContext();\n\n const classNames = cx([styles[\"panel-inner\"]], {\n [styles[\"drilldown-open\"]]: index !== undefined,\n });\n\n return (\n <div\n className={classNames}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={\n hostedInDialog\n ? undefined\n : typeof open !== \"undefined\" && open\n ? 0\n : -1\n }\n style={{\n ...style,\n ...(hostedInDialog\n ? {}\n : { overflowY: index === undefined ? \"auto\" : \"hidden\" }),\n }}\n >\n {children}\n </div>\n );\n};\n\n/**\n * Desktop side panel with DrillDown context and a pinned header; Content and\n * Footer can opt into sticky positioning. Omit `open` for a persistent panel;\n * a controlled panel becomes a Dialog on smaller pages.\n */\nexport const PagePanel = Object.assign(\n forwardRef((props: PagePanelProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n open,\n size = \"medium\",\n noPadding,\n style,\n className,\n defaultDrillDownIndex,\n onDrillDownContextChange,\n ...rest\n } = props;\n const [isMobile, setIsMobile] = useState<boolean>(false);\n const headerRef = useRef<HTMLElement>(null);\n\n const classNames = cx(\n [styles.panel, drillDownStyles.panel],\n [styles[size]],\n className,\n {\n [styles[\"open\"]]: typeof open === \"undefined\" ? true : open,\n [styles[\"persistent\"]]: typeof open === \"undefined\",\n [styles[\"noPadding\"]]: noPadding,\n },\n );\n\n const drillDownContextValue = useDrillDownContextState({\n defaultDrillDownIndex,\n });\n\n const drillDownContextProviderValue = useMemo(\n () => ({\n ...drillDownContextValue,\n hostIsInteractive: open !== false,\n }),\n [drillDownContextValue, open],\n );\n\n useLayoutEffect(() => {\n onDrillDownContextChange?.(drillDownContextProviderValue);\n }, [drillDownContextProviderValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n const previousOpenRef = useRef(open);\n\n useEffect(() => {\n if (isMobile) {\n previousOpenRef.current = open;\n return;\n }\n\n if (previousOpenRef.current && open === false) {\n drillDownContextValue.onHostClose?.();\n drillDownContextValue.onHostClosed?.();\n }\n\n previousOpenRef.current = open;\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n if (isMobile || !open || previousOpenRef.current) {\n return;\n }\n\n drillDownContextValue.setHostTrigger?.(\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null,\n );\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n if (typeof open !== \"undefined\" && isMobile) {\n return (\n <Dialog\n open={open}\n defaultDrillDownIndex={defaultDrillDownIndex}\n onDrillDownContextChange={onDrillDownContextChange}\n >\n <Dialog.Content>\n <PagePanelContext.Provider value={{ headerRef }}>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <PagePanelInner style={style} open={open} hostedInDialog>\n {children}\n </PagePanelInner>\n </div>\n </PagePanelContext.Provider>\n </Dialog.Content>\n </Dialog>\n );\n }\n return (\n <DrillDownContext.Provider value={drillDownContextProviderValue}>\n <PagePanelContext.Provider value={{ headerRef }}>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <PagePanelInner style={style} open={open}>\n {children}\n </PagePanelInner>\n </div>\n </PagePanelContext.Provider>\n </DrillDownContext.Provider>\n );\n }),\n {\n /** Header pinned above the panel's scrolling regions. */\n Header: PagePanelHeader,\n /** Content region that can pin below the measured panel header. */\n Content: PagePanelContent,\n /** Footer action region that can pin to the bottom of the panel. */\n Footer: PagePanelFooter,\n },\n);\n\nPagePanel.displayName = \"PagePanel\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type Ref,\n useContext,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport type { LayoutUtilProps } from \"../../../types\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\n\n/**\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type PageFooterProps = ComponentPropsWithoutRef<\"div\"> & LayoutUtilProps;\n\n/**\n * Footer landmark portaled into Page's footer slot. It renders in place outside\n * Page and waits for the slot inside Page.\n */\nexport const PageFooter = forwardRef(\n (props: PageFooterProps, ref: Ref<HTMLDivElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n const { footerSlot } = useContext(PageContext);\n\n const classNames = cx([styles[\"content-footer\"]], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const footer = (\n <footer className={classNames} ref={ref} style={styleCombined} {...rest}>\n {children}\n </footer>\n );\n\n if (footerSlot) {\n return createPortal(footer, footerSlot);\n }\n\n if (footerSlot === undefined) {\n return footer;\n }\n\n return null;\n },\n);\nPageFooter.displayName = \"PageFooter\";\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSidebar } from \"./PageSidebar\";\nimport { PageSidebarHeader } from \"./PageSidebarHeader\";\nimport { PageHeader } from \"./PageHeader\";\nimport { PageContent } from \"./PageContent\";\nimport { PagePanel } from \"./PagePanel\";\nimport { PageFooter } from \"./PageFooter\";\nimport { PageContext } from \"./PageContext\";\nimport { isPageContentScrollContainerActive } from \"./pageBreakpoint\";\nimport { useMergeRefs } from \"../../../hooks\";\n\n/**\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * Full-page shell with optional Sidebar, Header, Content, Panel, and Footer\n * regions. Content and Footer portal into the shell's main and footer slots.\n */\nexport const Page = Object.assign(\n forwardRef<HTMLDivElement, PageProps>(function PageInner(props, ref) {\n const { children, className, ...rest } = props;\n const classNames = cx(styles[\"page\"], className);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n\n const [pageWidth, setPageWidth] = useState<number>(0);\n const [contentWrapper, setContentWrapper] = useState<HTMLElement | null>(\n null,\n );\n const [footerSlot, setFooterSlot] = useState<HTMLElement | null>(null);\n\n // Ignore transient null refs during subtree teardown; storing null would\n // rerender Page mid-detach and loop. Both slots share Page's lifetime.\n const contentWrapperRef = useCallback((node: HTMLElement | null) => {\n setContentWrapper((prev) => (node && node !== prev ? node : prev));\n }, []);\n const footerSlotRef = useCallback((node: HTMLElement | null) => {\n setFooterSlot((prev) => (node && node !== prev ? node : prev));\n }, []);\n\n useLayoutEffect(() => {\n const element = elRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPageWidth(entry.contentRect.width);\n }\n });\n if (element) {\n resizeObserver.observe(element);\n }\n return () => resizeObserver.disconnect();\n }, [elRef]);\n\n const contextValue = useMemo(\n () => ({ pageWidth, contentWrapper, footerSlot }),\n [pageWidth, contentWrapper, footerSlot],\n );\n\n return (\n <PageContext.Provider value={contextValue}>\n <div className={classNames} data-anv=\"Page\" ref={combinedRef} {...rest}>\n <div className={styles[\"container\"]}>\n {children}\n <main\n className={styles[\"content-wrapper\"]}\n ref={contentWrapperRef}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- makes the native overflow:auto scroll region keyboard-operable (Page Up/Page Down) at the desktop breakpoint, where CSS turns this wrapper into an independently-scrolling container regardless of whether its content currently overflows */\n tabIndex={\n isPageContentScrollContainerActive(pageWidth) ? 0 : undefined\n }\n />\n <div className={styles[\"footer-slot\"]} ref={footerSlotRef} />\n </div>\n </div>\n </PageContext.Provider>\n );\n }),\n {\n /** Collapsible desktop sidebar that becomes a popover on smaller pages. */\n Sidebar: PageSidebar,\n /** Sidebar heading region hidden from accessibility when collapsed. */\n SidebarHeader: PageSidebarHeader,\n /** Page heading, breadcrumbs, status, description, and actions. */\n Header: PageHeader,\n /** Section portaled into Page's main landmark. */\n Content: PageContent,\n /** Omit `open` for a persistent panel; a controlled panel becomes a Dialog on smaller pages. */\n Panel: PagePanel,\n /** Footer portaled into Page's footer slot. */\n Footer: PageFooter,\n },\n);\nPage.displayName = \"Page\";\n"],"names":["core.primitive?.BreakpointLg","props","SegmentSVG","RespClose","RespOpen","OpenSVG","CloseSVG","IconKeyboardArrowDown","LocalSettings","ref","rest","MoreVert","Check","Close","Edit"],"mappings":"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"}
package/dist/Page.js CHANGED
@@ -1,2 +1,2 @@
1
- export { P as Page, P as default } from './Page-IZ4p51iJ.js';
1
+ export { P as Page, P as default } from './Page-ZSHNJs7z.js';
2
2
  //# sourceMappingURL=Page.js.map