@valu/block-components 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -3
- package/dist/components/content-picker/index.cjs +3 -8
- package/dist/components/content-picker/index.cjs.map +1 -1
- package/dist/components/content-picker/index.js +3 -8
- package/dist/components/content-picker/index.js.map +1 -1
- package/dist/components/document-picker/index.cjs +154 -15
- package/dist/components/document-picker/index.cjs.map +1 -1
- package/dist/components/document-picker/index.d.cts +16 -1
- package/dist/components/document-picker/index.d.ts +16 -1
- package/dist/components/document-picker/index.js +155 -16
- package/dist/components/document-picker/index.js.map +1 -1
- package/dist/index.cjs +157 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +158 -24
- package/dist/index.js.map +1 -1
- package/package.json +2 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../components/content-picker/styles/tokens.ts","../../../components/content-picker/styles/index.ts","../../../components/document-picker/styles/index.ts","../../../components/document-picker/utils.ts","../../../components/document-picker/SearchCombobox.tsx","../../../components/document-picker/badges/ExtensionBadge.tsx","../../../components/document-picker/SuggestionItem.tsx","../../../components/document-picker/SuggestionList.tsx","../../../components/document-picker/MediaLibraryButton.tsx","../../../components/document-picker/api/fetchDocuments.ts","../../../components/document-picker/hooks/useDocumentSearch.ts","../../../components/content-picker/hooks/useDebouncedValue.ts","../../../components/content-picker/hooks/useLiveRegion.ts","../../../components/content-picker/hooks/useKeyboardNav.ts","../../../components/document-picker/hooks/useDocumentPickerController.ts","../../../components/content-picker/styles/emotionCache.tsx","../../../components/document-picker/DocumentPickerPopover.tsx","../../../components/document-picker/DocumentPickerInline.tsx","../../../components/document-picker/SelectedItem.tsx","../../../components/content-picker/DragChip.tsx","../../../components/document-picker/hooks/useResolvedDocuments.ts","../../../components/document-picker/SelectedList.tsx","../../../components/document-picker/DocumentPicker.tsx","../../../components/document-picker/badges/FileSize.tsx"],"names":["css","styled","SelectedRow","Option","Root","uuidv4","decodeEntities","__","forwardRef","VisuallyHidden","jsx","jsxs","Icon","search","closeSmall","Fragment","useRef","useEffect","useCallback","Spinner","Button","RawMediaUpload","upload","addQueryArgs","apiFetch","useInfiniteQuery","keepPreviousData","useState","speak","useMemo","sprintf","_n","next","createCache","CacheProvider","Popover","useSortable","CSS","dragHandle","caution","chevronUp","chevronDown","useSelect","coreStore","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","defaultDropAnimation","QueryClient","useId","QueryClientProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Design tokens — CSS custom-property passthroughs with fallbacks.\n *\n * The picker is designed to render inside the WP admin where these\n * variables are defined by core (Gutenberg/@wordpress/components). When\n * rendered outside WP (tests, Storybook), the fallbacks keep it usable.\n *\n * Variable mapping:\n * - `accent` — primary action / focus ring / highlighted option edge\n * - `accentHover` — translucent accent for hover rows (matches core's\n * 4% color-mix recipe used on tertiary buttons)\n * - `accentActive` — translucent accent for active/highlighted rows\n * (matches core's 8% color-mix recipe, e.g.\n * `.components-button.is-tertiary:active`)\n * - `gray300` — input / popover borders\n * - `gray600` — secondary text (URL, meta)\n * - `gray900` — primary text\n * - `danger*` — trash / missing states\n */\nexport const tokens = {\n\taccent: 'var(--wp-admin-theme-color, #3858e9)',\n\taccentHover:\n\t\t'color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 4%, transparent)',\n\taccentActive:\n\t\t'color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 8%, transparent)',\n\tbg: 'var(--wp-components-color-background, #ffffff)',\n\tfg: 'var(--wp-components-color-foreground, #1e1e1e)',\n\tgray100: 'var(--wp-components-color-gray-100, #f0f0f0)',\n\tgray200: 'var(--wp-components-color-gray-200, #ebebeb)',\n\tgray300: 'var(--wp-components-color-gray-300, #dcdcde)',\n\tgray600: 'var(--wp-components-color-gray-600, #757575)',\n\tgray900: 'var(--wp-components-color-gray-900, #1e1e1e)',\n\tdanger: '#cc1818',\n\tdangerSoft: '#fef7f7',\n\tdangerLine: '#f0b7b7',\n\tsuccess: '#007017',\n\twarning: '#bd8600',\n\n\tradiusSm: '2px',\n\tradiusMd: '4px',\n\tradiusLg: '6px',\n\n\trowMinHeight: '40px',\n\tsuggestionMinHeight: '44px',\n\tthumbXs: '20px',\n\tthumbSm: '24px',\n\tthumbMd: '32px',\n\tthumbLg: '40px',\n\n\tshadowPopover: '0 6px 24px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.06)',\n\tshadowRow: '0 1px 0 rgba(0, 0, 0, 0.04)',\n\n\tspaceXs: '4px',\n\tspaceSm: '8px',\n\tspaceMd: '12px',\n\tspaceLg: '16px',\n\n\ttransitionFast: '120ms ease-out',\n\ttransitionMed: '200ms ease-out',\n\n\tfontSizeBody: '13px',\n\tfontSizeSmall: '11px',\n\tfontWeightRegular: 400,\n\tfontWeightMedium: 500,\n\tfontWeightBold: 600,\n} as const;\n\nexport type Tokens = typeof tokens;\n","import styled from '@emotion/styled';\nimport { css } from '@emotion/react';\n\nimport { tokens as t } from './tokens';\n\nexport const focusRing = css`\n\toutline: 2px solid ${t.accent};\n\toutline-offset: 1px;\n`;\n\nexport const visuallyHiddenCss = css`\n\tposition: absolute !important;\n\tclip: rect(1px, 1px, 1px, 1px);\n\twidth: 1px;\n\theight: 1px;\n\toverflow: hidden;\n\twhite-space: nowrap;\n`;\n\nexport const Root = styled.div`\n\tcolor: ${t.fg};\n\tfont-size: ${t.fontSizeBody};\n\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n`;\n\nexport const Label = styled.label`\n\tdisplay: block;\n\tmargin-bottom: ${t.spaceXs};\n\tfont-weight: ${t.fontWeightMedium};\n\tfont-size: ${t.fontSizeSmall};\n\ttext-transform: uppercase;\n\tletter-spacing: 0.02em;\n\tcolor: ${t.gray900};\n`;\n\nexport const HelpText = styled.p`\n\tmargin: ${t.spaceXs} 0 0;\n\tcolor: ${t.gray600};\n\tfont-size: ${t.fontSizeSmall};\n`;\n\nexport const InputShell = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tbackground: ${t.bg};\n\tborder: 1px solid ${t.gray300};\n\tborder-radius: ${t.radiusMd};\n\tpadding: 6px ${t.spaceMd};\n\tmin-height: 40px;\n\ttransition: border-color ${t.transitionFast}, box-shadow ${t.transitionFast};\n\n\t&:focus-within {\n\t\tborder-color: ${t.accent};\n\t\tbox-shadow: 0 0 0 1px ${t.accent};\n\t}\n`;\n\nexport const Input = styled.input`\n\tflex: 1;\n\tbackground: transparent;\n\tfont: inherit;\n\tcolor: ${t.fg};\n\tmin-width: 0;\n\n\t/*\n\t * WP admin's global input styles (\\`input[type=\"text\"]\\` in various\n\t * editor/sidebar stylesheets) set their own border + box-shadow at a\n\t * higher specificity than our Emotion class. \\`!important\\` is the\n\t * pragmatic reset here — we provide the focus chrome on the enclosing\n\t * \\`InputShell\\`, so every input-level border/outline/box-shadow\n\t * contribution is noise.\n\t */\n\t&,\n\t&:focus,\n\t&:focus-visible,\n\t&:hover {\n\t\tborder: 0 !important;\n\t\toutline: 0 !important;\n\t\tbox-shadow: none !important;\n\t}\n\n\t&::placeholder {\n\t\tcolor: ${t.gray600};\n\t}\n`;\n\nexport const SuggestionsShell = styled.div<{ inline?: boolean }>`\n\tbackground: ${t.bg};\n\tborder: 1px solid ${t.gray300};\n\tborder-radius: ${t.radiusMd};\n\toverflow: hidden;\n\tmax-height: 380px;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t${({ inline }) =>\n\t\tinline\n\t\t\t? css`\n\t\t\t\t\tmargin-top: ${t.spaceSm};\n\t\t\t\t`\n\t\t\t: css`\n\t\t\t\t\tbox-shadow: ${t.shadowPopover};\n\t\t\t\t`}\n`;\n\nexport const ListboxScroll = styled.div`\n\toverflow-y: auto;\n\tflex: 1;\n\tmin-height: 0;\n`;\n\nexport const StickyHeader = styled.div`\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 2;\n\tbackground: ${t.bg};\n`;\n\nexport const Listbox = styled.ul`\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: ${t.spaceXs} 0;\n`;\n\nexport const GroupHeading = styled.div`\n\tpadding: 4px ${t.spaceMd};\n\tfont-size: 10px !important;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.08em;\n\ttext-transform: uppercase !important;\n\tcolor: ${t.gray600};\n\tbackground: ${t.gray100};\n\tline-height: 1.8;\n\n\t[role='group']:not(:first-child) > & {\n\t\tborder-top: 1px solid ${t.gray200};\n\t}\n`;\n\nexport const PrimaryText = styled.span<{ muted?: boolean }>`\n\tfont-size: ${t.fontSizeBody};\n\tfont-weight: ${t.fontWeightMedium};\n\tcolor: ${({ muted }) => (muted ? t.gray600 : t.gray900)};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tdisplay: block;\n\tline-height: 1.3;\n\ttransition: color ${t.transitionFast};\n`;\n\nexport const Option = styled.li<{ highlighted?: boolean; disabled?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 4px ${t.spaceMd};\n\tcursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n\topacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n\tmin-height: ${t.suggestionMinHeight};\n\tbackground: ${({ highlighted }) => (highlighted ? t.accentActive : 'transparent')};\n\tposition: relative;\n\ttransition: background ${t.transitionFast};\n\n\t&:hover {\n\t\tbackground: ${({ highlighted, disabled }) =>\n\t\t\tdisabled ? 'transparent' : highlighted ? t.accentActive : t.accentHover};\n\t}\n\n\t/*\n\t * Target the title via a stable data attribute rather than Emotion's\n\t * generated class — the popover body has its own Emotion cache, so\n\t * class-name interpolation isn't guaranteed to match across caches.\n\t */\n\t&:hover [data-valu-title] {\n\t\tcolor: ${t.accent};\n\t}\n\n\t${({ highlighted }) =>\n\t\thighlighted &&\n\t\tcss`\n\t\t\t[data-valu-title] {\n\t\t\t\tcolor: ${t.accent};\n\t\t\t}\n\t\t\t&::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0;\n\t\t\t\ttop: 4px;\n\t\t\t\tbottom: 4px;\n\t\t\t\twidth: 2px;\n\t\t\t\tborder-radius: 0 ${t.radiusSm} ${t.radiusSm} 0;\n\t\t\t\tbackground: ${t.accent};\n\t\t\t}\n\t\t`}\n`;\n\nexport const Thumb = styled.div<{\n\tsize?: 'xs' | 'sm' | 'md' | 'lg';\n\tmissing?: boolean;\n\thasImage?: boolean;\n\tavatar?: boolean;\n}>`\n\tflex: 0 0 auto;\n\twidth: ${({ size, hasImage, avatar }) =>\n\t\tavatar\n\t\t\t? '22px'\n\t\t\t: hasImage\n\t\t\t\t? t.thumbMd\n\t\t\t\t: size === 'md'\n\t\t\t\t\t? t.thumbMd\n\t\t\t\t\t: size === 'lg'\n\t\t\t\t\t\t? t.thumbLg\n\t\t\t\t\t\t: size === 'sm'\n\t\t\t\t\t\t\t? t.thumbSm\n\t\t\t\t\t\t\t: '22px'};\n\theight: ${({ size, hasImage, avatar }) =>\n\t\tavatar\n\t\t\t? '22px'\n\t\t\t: hasImage\n\t\t\t\t? t.thumbMd\n\t\t\t\t: size === 'md'\n\t\t\t\t\t? t.thumbMd\n\t\t\t\t\t: size === 'lg'\n\t\t\t\t\t\t? t.thumbLg\n\t\t\t\t\t\t: size === 'sm'\n\t\t\t\t\t\t\t? t.thumbSm\n\t\t\t\t\t\t\t: '22px'};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcolor: ${({ missing }) => (missing ? t.danger : t.gray600)};\n\n\t${({ hasImage, avatar }) =>\n\t\tavatar\n\t\t\t? css`\n\t\t\t\t\tborder-radius: 999px;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t`\n\t\t\t: hasImage\n\t\t\t\t? css`\n\t\t\t\t\t\tborder: 1px solid ${t.gray200};\n\t\t\t\t\t\tborder-radius: ${t.radiusSm};\n\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\tbackground: ${t.gray100};\n\t\t\t\t\t`\n\t\t\t\t: undefined}\n\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-fit: cover;\n\t\tdisplay: block;\n\t}\n\n\tsvg {\n\t\twidth: 22px;\n\t\theight: 22px;\n\t}\n`;\n\nexport const ItemBody = styled.div`\n\tflex: 1;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0;\n`;\n\nexport const SecondaryText = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tdisplay: block;\n\tline-height: 1.3;\n`;\n\nexport const BadgeRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceXs};\n\tflex-wrap: wrap;\n\tmargin-top: 0;\n`;\n\nexport const TypeHint = styled.span`\n\tflex: 0 0 auto;\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\tmargin-left: ${t.spaceSm};\n\twhite-space: nowrap;\n`;\n\nexport const ActionColumn = styled.div`\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceXs};\n\tmargin-left: auto;\n`;\n\nexport const SelectedListEl = styled.ul`\n\tlist-style: none;\n\tmargin: ${t.spaceSm} 0 0;\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px;\n`;\n\nexport const SelectedRow = styled.li<{ dragging?: boolean; missing?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 2px ${t.spaceSm};\n\tbackground: ${({ missing }) => (missing ? t.dangerSoft : t.bg)};\n\tborder: 1px solid ${({ missing }) => (missing ? t.dangerLine : t.gray300)};\n\tborder-radius: ${t.radiusMd};\n\tmin-height: ${t.rowMinHeight};\n\tbox-shadow: ${({ dragging }) => (dragging ? t.shadowPopover : 'none')};\n\ttransition: box-shadow ${t.transitionFast}, border-color ${t.transitionFast};\n\n\t&:hover {\n\t\tborder-color: ${({ missing }) => (missing ? t.dangerLine : t.gray600)};\n\t}\n`;\n\nexport const DragHandleButton = styled.button`\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 20px;\n\theight: 20px;\n\tborder: 0;\n\tbackground: transparent;\n\tcolor: ${t.gray600};\n\tcursor: grab;\n\tborder-radius: ${t.radiusSm};\n\tpadding: 0;\n\n\t&:hover {\n\t\tbackground: ${t.gray100};\n\t\tcolor: ${t.gray900};\n\t}\n\n\t&:focus-visible {\n\t\t${focusRing}\n\t}\n\n\t&:active {\n\t\tcursor: grabbing;\n\t}\n\n\t&[disabled] {\n\t\tcursor: not-allowed;\n\t\topacity: 0.4;\n\t}\n\n\tsvg {\n\t\twidth: 14px;\n\t\theight: 14px;\n\t}\n`;\n\nexport const EmptyState = styled.div`\n\tpadding: ${t.spaceLg} ${t.spaceMd};\n\ttext-align: center;\n\tcolor: ${t.gray600};\n\tfont-size: ${t.fontSizeBody};\n`;\n\nexport const LoadingState = styled.div`\n\tpadding: ${t.spaceLg} ${t.spaceMd};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: ${t.spaceSm};\n\tcolor: ${t.gray600};\n\tfont-size: ${t.fontSizeBody};\n`;\n\nexport const ErrorState = styled.div`\n\tpadding: ${t.spaceMd};\n\tbackground: ${t.dangerSoft};\n\tcolor: ${t.danger};\n\tborder: 1px solid ${t.dangerLine};\n\tborder-radius: ${t.radiusMd};\n\tfont-size: ${t.fontSizeBody};\n`;\n\nexport const MaxedOutBanner = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: ${t.spaceSm} ${t.spaceMd};\n\tbackground: ${t.gray100};\n\tcolor: ${t.gray900};\n\tborder: 1px dashed ${t.gray300};\n\tborder-radius: ${t.radiusMd};\n\tfont-size: ${t.fontSizeSmall};\n`;\n\nexport const CountPill = styled.span`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tpadding: 2px 8px;\n\tbackground: ${t.gray100};\n\tcolor: ${t.gray900};\n\tborder-radius: 999px;\n\tfont-size: 10px;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.04em;\n`;\n\nexport const ChipWrap = styled.div`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tbackground: ${t.gray900};\n\tcolor: #fff;\n\tborder-radius: ${t.radiusMd};\n\tpadding: 6px ${t.spaceMd};\n\tmax-width: 280px;\n\tbox-shadow: ${t.shadowPopover};\n`;\n\nexport const ChipTitle = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tfont-weight: ${t.fontWeightMedium};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n`;\n\nexport const LoadMoreRow = styled.li`\n\tlist-style: none;\n\tdisplay: flex;\n\tjustify-content: center;\n\tpadding: ${t.spaceSm};\n`;\n\nexport const SearchIconWrap = styled.span`\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tcolor: ${t.gray600};\n`;\n\nexport const HeaderRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: ${t.spaceSm};\n\tmargin-top: ${t.spaceSm};\n\tmargin-bottom: ${t.spaceXs};\n`;\n\nexport const HeaderTitle = styled.h3`\n\tmargin: 0;\n\tfont-size: 10px !important;\n\ttext-transform: uppercase !important;\n\tletter-spacing: 0.04em;\n\tfont-weight: ${t.fontWeightBold};\n\tcolor: ${t.gray600};\n\tline-height: 1.8;\n`;\n","import styled from '@emotion/styled';\nimport { css } from '@emotion/react';\n\nimport { tokens as t } from '../../content-picker/styles/tokens';\n\nexport { tokens } from '../../content-picker/styles/tokens';\n\n// Reuse the generic primitives from content-picker so visual language stays\n// in sync. Anything specific to the document picker is defined below.\nexport {\n\tActionColumn,\n\tChipTitle,\n\tChipWrap,\n\tCountPill,\n\tDragHandleButton,\n\tEmptyState,\n\tErrorState,\n\tHeaderRow,\n\tHeaderTitle,\n\tInput,\n\tInputShell,\n\tItemBody,\n\tListbox,\n\tListboxScroll,\n\tLoadMoreRow,\n\tLoadingState,\n\tMaxedOutBanner,\n\tPrimaryText,\n\tSearchIconWrap,\n\tSecondaryText,\n\tSelectedListEl,\n\tStickyHeader,\n\tSuggestionsShell,\n} from '../../content-picker/styles';\n\n// `SelectedRow` is forked from content-picker so we can attach a container\n// query: rows reflow inline (title + filename + meta on one line) when the\n// row is wide enough, and stack (title above filename, meta hidden) when\n// rendered in a narrow context like the inspector sidebar.\nexport const SelectedRow = styled.li<{ dragging?: boolean; missing?: boolean }>`\n\tcontainer-type: inline-size;\n\tcontainer-name: valu-dp-row;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 2px ${t.spaceSm};\n\tbackground: ${({ missing }) => (missing ? t.dangerSoft : t.bg)};\n\tborder: 1px solid ${({ missing }) => (missing ? t.dangerLine : t.gray300)};\n\tborder-radius: ${t.radiusMd};\n\tmin-height: ${t.rowMinHeight};\n\tbox-shadow: ${({ dragging }) => (dragging ? t.shadowPopover : 'none')};\n\ttransition: box-shadow ${t.transitionFast}, border-color ${t.transitionFast};\n\n\t&:hover {\n\t\tborder-color: ${({ missing }) => (missing ? t.dangerLine : t.gray600)};\n\t}\n`;\n\n// Wide-row breakpoint. Below this width, rows fall back to the stacked\n// narrow layout (title above filename, meta hidden).\nconst WIDE_ROW = '380px';\n\n// `Option` (suggestion row) is forked from content-picker so it also acts\n// as a container for the same `valu-dp-row` query — suggestion rows and\n// selected rows share one responsive layout.\nexport const Option = styled.li<{ highlighted?: boolean; disabled?: boolean }>`\n\tcontainer-type: inline-size;\n\tcontainer-name: valu-dp-row;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 4px ${t.spaceMd};\n\tcursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n\topacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n\tmin-height: ${t.suggestionMinHeight};\n\tbackground: ${({ highlighted }) => (highlighted ? t.accentActive : 'transparent')};\n\tposition: relative;\n\ttransition: background ${t.transitionFast};\n\n\t&:hover {\n\t\tbackground: ${({ highlighted, disabled }) =>\n\t\t\tdisabled ? 'transparent' : highlighted ? t.accentActive : t.accentHover};\n\t}\n\n\t&:hover [data-valu-title] {\n\t\tcolor: ${t.accent};\n\t}\n\n\t${({ highlighted }) =>\n\t\thighlighted &&\n\t\tcss`\n\t\t\t[data-valu-title] {\n\t\t\t\tcolor: ${t.accent};\n\t\t\t}\n\t\t\t&::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0;\n\t\t\t\ttop: 4px;\n\t\t\t\tbottom: 4px;\n\t\t\t\twidth: 2px;\n\t\t\t\tborder-radius: 0 ${t.radiusSm} ${t.radiusSm} 0;\n\t\t\t\tbackground: ${t.accent};\n\t\t\t}\n\t\t`}\n`;\n\n/** Body of a selected row — stacks narrow, lays out inline when wide. */\nexport const DocRowBody = styled.div`\n\tflex: 1;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0;\n\n\t@container valu-dp-row (min-width: ${WIDE_ROW}) {\n\t\tflex-direction: row;\n\t\talign-items: baseline;\n\t\tgap: ${t.spaceMd};\n\t}\n`;\n\n/**\n * Filename text — block element under the title when narrow,\n * inline next to it when wide.\n */\nexport const FilenameText = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tdisplay: block;\n\tline-height: 1.3;\n\tmin-width: 0;\n\n\t@container valu-dp-row (min-width: ${WIDE_ROW}) {\n\t\tflex: 1;\n\t}\n`;\n\n/**\n * Inline meta (size, date) — hidden in the narrow layout, visible and\n * right-aligned in the wide one.\n */\nexport const DocMetaInline = styled.div`\n\tdisplay: none;\n\n\t@container valu-dp-row (min-width: ${WIDE_ROW}) {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: ${t.spaceSm};\n\t\tflex: 0 0 auto;\n\t\tcolor: ${t.gray600};\n\t\tfont-size: ${t.fontSizeSmall};\n\t\twhite-space: nowrap;\n\t}\n`;\n\nexport const Root = styled.div`\n\tcolor: ${t.fg};\n\tfont-size: ${t.fontSizeBody};\n\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n`;\n\nexport const ActionsRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tmargin-top: ${t.spaceSm};\n`;\n\nexport const FileMeta = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\twhite-space: nowrap;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: ${t.spaceXs};\n\n\t&::before {\n\t\tcontent: '·';\n\t\topacity: 0.6;\n\t}\n\n\t&:first-of-type::before {\n\t\tcontent: '';\n\t}\n`;\n\nexport const MetaRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tflex-wrap: wrap;\n\tmin-width: 0;\n\tcolor: ${t.gray600};\n`;\n\n// Extension badge — a uppercase pill in the leading slot. Tone shifts by\n// extension so a row of mixed files is scannable at a glance.\nexport const ExtensionPill = styled.span<{ tone?: 'red' | 'blue' | 'green' | 'orange' | 'gray' }>`\n\tflex: 0 0 auto;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmin-width: 38px;\n\tpadding: 2px 6px;\n\tfont-size: 10px;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n\tborder-radius: ${t.radiusSm};\n\tborder: 1px solid currentColor;\n\tline-height: 1.4;\n\twhite-space: nowrap;\n\n\t${({ tone = 'gray' }) => {\n\t\tswitch (tone) {\n\t\t\tcase 'red':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #c0392b;\n\t\t\t\t\tbackground: #fdecea;\n\t\t\t\t`;\n\t\t\tcase 'blue':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #1a4fb8;\n\t\t\t\t\tbackground: #e8efff;\n\t\t\t\t`;\n\t\t\tcase 'green':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #1f6b3a;\n\t\t\t\t\tbackground: #e6f4ea;\n\t\t\t\t`;\n\t\t\tcase 'orange':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #b15a06;\n\t\t\t\t\tbackground: #fff1de;\n\t\t\t\t`;\n\t\t\tdefault:\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: ${t.gray900};\n\t\t\t\t\tbackground: ${t.gray100};\n\t\t\t\t`;\n\t\t}\n\t}}\n`;\n","import { v4 as uuidv4 } from 'uuid';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __ } from '@wordpress/i18n';\n\nimport type { DocumentItem } from './types';\n\nexport const generateKey = (): string => uuidv4();\n\n/** Stable ARIA id helper: `${rootId}-${suffix}`. */\nexport const aria = (rootId: string, suffix: string): string => `${rootId}-${suffix}`;\n\nexport const isMaxedOut = (value: DocumentItem[], maxItems: number): boolean =>\n\tNumber.isFinite(maxItems) && value.length >= maxItems;\n\n/**\n * Default MIME types treated as \"documents\": PDF, Word, Excel, PowerPoint\n * (both legacy and Office Open XML variants).\n */\nexport const DEFAULT_DOCUMENT_MIME_TYPES: readonly string[] = [\n\t'application/pdf',\n\t'application/msword',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t'application/vnd.ms-excel',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t'application/vnd.ms-powerpoint',\n\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n] as const;\n\nconst decodeRendered = (raw: unknown): string => {\n\tif (typeof raw === 'string') return decodeEntities(raw);\n\tif (raw && typeof raw === 'object' && 'rendered' in raw) {\n\t\tconst rendered = (raw as { rendered?: unknown }).rendered;\n\t\tif (typeof rendered === 'string') return decodeEntities(rendered);\n\t}\n\treturn '';\n};\n\n/** Extract the basename from a URL/path. Strips query and hash. */\nexport const basenameFromUrl = (url: string | undefined | null): string => {\n\tif (!url) return '';\n\tconst cleaned = url.split('#')[0]!.split('?')[0]!;\n\tconst segments = cleaned.split('/');\n\treturn segments[segments.length - 1] ?? '';\n};\n\n/** Uppercase extension from a URL or filename. `''` if none. */\nexport const extensionFromUrl = (url: string | undefined | null): string => {\n\tconst base = basenameFromUrl(url);\n\tconst dot = base.lastIndexOf('.');\n\tif (dot <= 0 || dot === base.length - 1) return '';\n\treturn base.slice(dot + 1).toUpperCase();\n};\n\n/**\n * Human-readable file size. Mirrors the `wp_format_bytes()` style used in\n * WP admin (1 KB = 1024 B). Returns an empty string when the input is\n * undefined or non-positive.\n */\nexport const formatFileSize = (bytes: number | undefined): string => {\n\tif (!bytes || bytes <= 0 || !Number.isFinite(bytes)) return '';\n\tconst units = ['B', 'KB', 'MB', 'GB', 'TB'];\n\tlet value = bytes;\n\tlet unit = 0;\n\twhile (value >= 1024 && unit < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tunit += 1;\n\t}\n\tconst fixed = value >= 100 || unit === 0 ? value.toFixed(0) : value.toFixed(1);\n\treturn `${fixed} ${units[unit]}`;\n};\n\n/** Format an ISO date string as a locale date (no time). */\nexport const formatModified = (iso: string | undefined): string => {\n\tif (!iso) return '';\n\tconst date = new Date(iso);\n\tif (Number.isNaN(date.getTime())) return '';\n\ttry {\n\t\treturn new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(date);\n\t} catch {\n\t\treturn date.toISOString().slice(0, 10);\n\t}\n};\n\ninterface MediaRecordShape {\n\tid: number;\n\ttitle?: { rendered?: string } | string;\n\tsource_url?: string;\n\turl?: string; // some endpoints/plugins expose `url` instead of `source_url`\n\tmime_type?: string;\n\tmime?: string; // legacy field on attachment objects from wp.media\n\tmedia_details?: {\n\t\tfilesize?: number;\n\t\toriginal_image?: string;\n\t};\n\tmodified?: string;\n\tmodified_gmt?: string;\n\tdate?: string;\n\tfilename?: string;\n\tlink?: string;\n}\n\n/**\n * Normalize a record from `/wp/v2/media` (or from `MediaUpload.onSelect`)\n * into a `DocumentItem`. Tolerant of both shapes — `source_url`/`url`,\n * `mime_type`/`mime`, etc.\n */\nexport const mapMediaToDocumentItem = (raw: MediaRecordShape): DocumentItem => {\n\tconst url = raw.source_url ?? raw.url ?? raw.link ?? '';\n\tconst filename = raw.filename || basenameFromUrl(url);\n\tconst title = decodeRendered(raw.title) || filename;\n\tconst mimeType = raw.mime_type ?? raw.mime ?? '';\n\tconst extension = extensionFromUrl(url) || extensionFromUrl(filename);\n\tconst fileSize = raw.media_details?.filesize;\n\tconst modified = raw.modified ?? raw.modified_gmt ?? raw.date;\n\n\treturn {\n\t\tkey: generateKey(),\n\t\tid: raw.id,\n\t\ttitle,\n\t\tfilename,\n\t\turl,\n\t\tmimeType,\n\t\textension,\n\t\tfileSize,\n\t\tmodified,\n\t\traw,\n\t};\n};\n\n/** Filter out items already present in `value` by attachment id. */\nexport const dedupeAgainst = (\n\titems: DocumentItem[],\n\tvalue: DocumentItem[],\n\tenabled: boolean,\n): DocumentItem[] => {\n\tif (!enabled || value.length === 0) return items;\n\tconst ids = new Set(value.map((v) => v.id));\n\treturn items.filter((i) => !ids.has(i.id));\n};\n\n/**\n * Filter items so that either the MIME type matches one of `allowedMimeTypes`\n * OR the extension matches one of `allowedExtensions` (case-insensitive).\n * If both lists are empty, every item passes.\n */\nexport const matchesAllowed = (\n\titem: { mimeType: string; extension: string },\n\tallowedMimeTypes: string[] | undefined,\n\tallowedExtensions: string[] | undefined,\n): boolean => {\n\tconst hasMime = allowedMimeTypes && allowedMimeTypes.length > 0;\n\tconst hasExt = allowedExtensions && allowedExtensions.length > 0;\n\tif (!hasMime && !hasExt) return true;\n\tif (hasMime && allowedMimeTypes!.includes(item.mimeType)) return true;\n\tif (hasExt) {\n\t\tconst upper = item.extension.toUpperCase();\n\t\tif (allowedExtensions!.some((e) => e.replace(/^\\./, '').toUpperCase() === upper)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/** Label used by the SR-only \"extension badge\" prefix. */\nexport const extensionA11yLabel = (extension: string): string =>\n\textension\n\t\t? __('File type', 'valu-block-components') + ': ' + extension\n\t\t: __('Unknown file type', 'valu-block-components');\n","import { forwardRef, type ChangeEvent, type KeyboardEvent } from 'react';\nimport { Icon, VisuallyHidden } from '@wordpress/components';\nimport { search, closeSmall } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { Input, InputShell, SearchIconWrap } from './styles';\nimport { aria } from './utils';\nimport type { DocumentPickerLabels } from './types';\n\nexport interface SearchComboboxProps {\n\trootId: string;\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tonFocus?: () => void;\n\tonBlur?: () => void;\n\tonKeyDown: (event: KeyboardEvent) => void;\n\tplaceholder?: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tdisabled?: boolean;\n\topen: boolean;\n\tlistboxId: string;\n\tactiveOptionId?: string;\n\tlabels: DocumentPickerLabels;\n}\n\nexport const SearchCombobox = forwardRef<HTMLInputElement, SearchComboboxProps>(\n\t(\n\t\t{\n\t\t\trootId,\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tonKeyDown,\n\t\t\tplaceholder,\n\t\t\tlabel,\n\t\t\thideLabelFromVision,\n\t\t\thelp,\n\t\t\tdisabled,\n\t\t\topen,\n\t\t\tlistboxId,\n\t\t\tactiveOptionId,\n\t\t\tlabels,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst inputId = aria(rootId, 'input');\n\t\tconst helpId = help ? aria(rootId, 'help') : undefined;\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t{hideLabelFromVision ? (\n\t\t\t\t\t<VisuallyHidden as=\"label\" htmlFor={inputId}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t) : (\n\t\t\t\t\t<label htmlFor={inputId} style={{ display: 'block', marginBottom: 4 }}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t\t<InputShell aria-disabled={disabled || undefined}>\n\t\t\t\t\t<SearchIconWrap aria-hidden=\"true\">\n\t\t\t\t\t\t<Icon icon={search} size={20} />\n\t\t\t\t\t</SearchIconWrap>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\taria-controls={listboxId}\n\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\taria-activedescendant={activeOptionId}\n\t\t\t\t\t\taria-describedby={helpId}\n\t\t\t\t\t\taria-label={hideLabelFromVision ? label : undefined}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\tplaceholder ?? labels.input ?? __('Search documents', 'valu-block-components')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\tspellCheck={false}\n\t\t\t\t\t\tonChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n\t\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t/>\n\t\t\t\t\t{value.length > 0 && !disabled ? (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onChange('')}\n\t\t\t\t\t\t\taria-label={__('Clear search', 'valu-block-components')}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\tbackground: 'transparent',\n\t\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\t\tpadding: 2,\n\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\tcolor: 'currentColor',\n\t\t\t\t\t\t\t\topacity: 0.6,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={closeSmall} size={18} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : null}\n\t\t\t\t</InputShell>\n\t\t\t\t{help ? (\n\t\t\t\t\t<p id={helpId} style={{ margin: '4px 0 0', fontSize: 11, opacity: 0.7 }}>\n\t\t\t\t\t\t{help}\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nSearchCombobox.displayName = 'SearchCombobox';\n","import { VisuallyHidden } from '@wordpress/components';\n\nimport { ExtensionPill } from '../styles';\nimport { extensionA11yLabel } from '../utils';\n\nconst toneFor = (extension: string): 'red' | 'blue' | 'green' | 'orange' | 'gray' => {\n\tconst ext = extension.toUpperCase();\n\tif (ext === 'PDF') return 'red';\n\tif (ext === 'DOC' || ext === 'DOCX' || ext === 'RTF' || ext === 'ODT') return 'blue';\n\tif (ext === 'XLS' || ext === 'XLSX' || ext === 'CSV' || ext === 'ODS') return 'green';\n\tif (ext === 'PPT' || ext === 'PPTX' || ext === 'ODP') return 'orange';\n\treturn 'gray';\n};\n\nexport interface ExtensionBadgeProps {\n\textension: string;\n\t/** Override of the visible label (defaults to the uppercase extension). */\n\tlabel?: string;\n}\n\nexport const ExtensionBadge = ({ extension, label }: ExtensionBadgeProps) => {\n\tconst visible = label ?? (extension || '?');\n\treturn (\n\t\t<>\n\t\t\t<ExtensionPill tone={toneFor(extension)} aria-hidden=\"true\">\n\t\t\t\t{visible}\n\t\t\t</ExtensionPill>\n\t\t\t<VisuallyHidden>{extensionA11yLabel(extension)}</VisuallyHidden>\n\t\t</>\n\t);\n};\n","import { useCallback, useEffect, useRef, type MouseEvent, type ReactNode } from 'react';\n\nimport {\n\tDocMetaInline,\n\tDocRowBody,\n\tFilenameText,\n\tOption,\n\tPrimaryText,\n} from './styles';\nimport { ExtensionBadge } from './badges/ExtensionBadge';\nimport { formatFileSize, formatModified } from './utils';\nimport type { DocumentItem, SuggestionRenderState } from './types';\n\nexport interface SuggestionItemProps {\n\titem: DocumentItem;\n\toptionId: string;\n\thighlighted: boolean;\n\tselected: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tonHover: () => void;\n\tonSelect: () => void;\n\trender?: (item: DocumentItem, state: SuggestionRenderState) => ReactNode;\n}\n\nexport const SuggestionItem = ({\n\titem,\n\toptionId,\n\thighlighted,\n\tselected,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n\tonHover,\n\tonSelect,\n\trender,\n}: SuggestionItemProps) => {\n\tconst ref = useRef<HTMLLIElement | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!highlighted || !ref.current) return;\n\t\tref.current.scrollIntoView({ block: 'nearest' });\n\t}, [highlighted]);\n\n\tconst handleClick = useCallback(\n\t\t(event: MouseEvent) => {\n\t\t\tevent.preventDefault();\n\t\t\tonSelect();\n\t\t},\n\t\t[onSelect],\n\t);\n\n\tconst handleMouseDown = useCallback((event: MouseEvent) => {\n\t\tevent.preventDefault();\n\t}, []);\n\n\tif (render) {\n\t\treturn (\n\t\t\t<Option\n\t\t\t\tref={ref}\n\t\t\t\trole=\"option\"\n\t\t\t\tid={optionId}\n\t\t\t\taria-selected={selected}\n\t\t\t\thighlighted={highlighted}\n\t\t\t\tonMouseEnter={onHover}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonClick={handleClick}\n\t\t\t>\n\t\t\t\t{render(item, { highlighted, selected })}\n\t\t\t</Option>\n\t\t);\n\t}\n\n\tconst modified = showModifiedDate ? formatModified(item.modified) : '';\n\tconst hasMeta = Boolean((showFileSize && item.fileSize) || modified);\n\n\treturn (\n\t\t<Option\n\t\t\tref={ref}\n\t\t\trole=\"option\"\n\t\t\tid={optionId}\n\t\t\taria-selected={selected}\n\t\t\thighlighted={highlighted}\n\t\t\tonMouseEnter={onHover}\n\t\t\tonMouseDown={handleMouseDown}\n\t\t\tonClick={handleClick}\n\t\t>\n\t\t\t{showExtensionBadge ? <ExtensionBadge extension={item.extension} /> : null}\n\t\t\t<DocRowBody>\n\t\t\t\t<PrimaryText data-valu-title title={item.title}>\n\t\t\t\t\t{item.title}\n\t\t\t\t</PrimaryText>\n\t\t\t\t<FilenameText title={item.filename}>{item.filename}</FilenameText>\n\t\t\t</DocRowBody>\n\t\t\t{hasMeta ? (\n\t\t\t\t<DocMetaInline>\n\t\t\t\t\t{showFileSize && item.fileSize ? (\n\t\t\t\t\t\t<span>{formatFileSize(item.fileSize)}</span>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{modified ? <span>{modified}</span> : null}\n\t\t\t\t</DocMetaInline>\n\t\t\t) : null}\n\t\t</Option>\n\t);\n};\n","import { useEffect, useRef, type ReactNode } from 'react';\nimport { Button, Spinner } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nimport { SuggestionItem } from './SuggestionItem';\nimport {\n\tEmptyState,\n\tErrorState,\n\tListbox,\n\tListboxScroll,\n\tLoadMoreRow,\n\tLoadingState,\n\tStickyHeader,\n} from './styles';\nimport { aria } from './utils';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tSuggestionRenderState,\n} from './types';\n\nexport interface SuggestionListProps {\n\tlistboxId: string;\n\trootId: string;\n\tsuggestions: DocumentItem[];\n\tloading: boolean;\n\tfetchingMore: boolean;\n\thasMore: boolean;\n\terror: unknown;\n\tquery: string;\n\thighlightedIndex: number;\n\tselectedKeys: Set<string>;\n\tlabels: DocumentPickerLabels;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\theaderSlot?: ReactNode;\n\trenderSuggestion?: (item: DocumentItem, state: SuggestionRenderState) => ReactNode;\n\tonHover: (index: number) => void;\n\tonSelect: (item: DocumentItem) => void;\n\tonLoadMore: () => void;\n}\n\nexport const SuggestionList = ({\n\tlistboxId,\n\trootId,\n\tsuggestions,\n\tloading,\n\tfetchingMore,\n\thasMore,\n\terror,\n\tquery,\n\thighlightedIndex,\n\tselectedKeys,\n\tlabels,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n\theaderSlot,\n\trenderSuggestion,\n\tonHover,\n\tonSelect,\n\tonLoadMore,\n}: SuggestionListProps) => {\n\tconst scrollRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!hasMore || !sentinelRef.current || !scrollRef.current) return;\n\t\tconst io = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tfor (const e of entries) {\n\t\t\t\t\tif (e.isIntersecting) onLoadMore();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ root: scrollRef.current, rootMargin: '120px' },\n\t\t);\n\t\tio.observe(sentinelRef.current);\n\t\treturn () => io.disconnect();\n\t}, [hasMore, onLoadMore]);\n\n\tconst header = headerSlot ? <StickyHeader>{headerSlot}</StickyHeader> : null;\n\n\tif (error) {\n\t\treturn (\n\t\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t\t{header}\n\t\t\t\t<ErrorState role=\"alert\">\n\t\t\t\t\t{labels.empty ??\n\t\t\t\t\t\t__('Search failed. Please try again.', 'valu-block-components')}\n\t\t\t\t</ErrorState>\n\t\t\t</ListboxScroll>\n\t\t);\n\t}\n\n\tif (loading && suggestions.length === 0) {\n\t\treturn (\n\t\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t\t{header}\n\t\t\t\t<LoadingState>\n\t\t\t\t\t<Spinner />\n\t\t\t\t\t{labels.loading ?? __('Searching…', 'valu-block-components')}\n\t\t\t\t</LoadingState>\n\t\t\t</ListboxScroll>\n\t\t);\n\t}\n\n\tif (suggestions.length === 0) {\n\t\tconst emptyMessage =\n\t\t\tquery.trim().length > 0\n\t\t\t\t? (labels.noDocumentsFound ??\n\t\t\t\t\t__('No documents match this search.', 'valu-block-components'))\n\t\t\t\t: __('Type to search documents.', 'valu-block-components');\n\t\treturn (\n\t\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t\t{header}\n\t\t\t\t<EmptyState>{emptyMessage}</EmptyState>\n\t\t\t</ListboxScroll>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t{header}\n\t\t\t<Listbox\n\t\t\t\trole=\"listbox\"\n\t\t\t\tid={listboxId}\n\t\t\t\taria-label={labels.input ?? __('Document suggestions', 'valu-block-components')}\n\t\t\t>\n\t\t\t\t{suggestions.map((item, index) => {\n\t\t\t\t\tconst optionId = aria(rootId, `option-${index}`);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SuggestionItem\n\t\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\toptionId={optionId}\n\t\t\t\t\t\t\thighlighted={index === highlightedIndex}\n\t\t\t\t\t\t\tselected={selectedKeys.has(item.key)}\n\t\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t\t\tonHover={() => onHover(index)}\n\t\t\t\t\t\t\tonSelect={() => onSelect(item)}\n\t\t\t\t\t\t\t{...(renderSuggestion ? { render: renderSuggestion } : {})}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{hasMore ? (\n\t\t\t\t\t<LoadMoreRow>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={onLoadMore}\n\t\t\t\t\t\t\tdisabled={fetchingMore}\n\t\t\t\t\t\t\tisBusy={fetchingMore}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{fetchingMore\n\t\t\t\t\t\t\t\t? __('Loading…', 'valu-block-components')\n\t\t\t\t\t\t\t\t: __('Load more', 'valu-block-components')}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</LoadMoreRow>\n\t\t\t\t) : null}\n\t\t\t\t<div ref={sentinelRef} aria-hidden=\"true\" />\n\t\t\t</Listbox>\n\t\t</ListboxScroll>\n\t);\n};\n","import type { ComponentType, ReactNode } from 'react';\nimport { Button } from '@wordpress/components';\nimport { MediaUpload as RawMediaUpload } from '@wordpress/media-utils';\nimport { upload } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { mapMediaToDocumentItem, matchesAllowed } from './utils';\nimport type { DocumentItem, DocumentPickerLabels } from './types';\n\ninterface RawMedia {\n\tid: number;\n\t[key: string]: unknown;\n}\n\ninterface MediaUploadProps {\n\tallowedTypes?: string[];\n\tmultiple?: boolean;\n\tgallery?: boolean;\n\tvalue?: number | number[];\n\tonSelect: (value: RawMedia | RawMedia[]) => void;\n\trender: (props: { open: () => void }) => ReactNode;\n}\n\n// The class exported by @wordpress/media-utils doesn't ship a typed props\n// interface. Cast it once here and use the typed alias everywhere.\nconst MediaUpload = RawMediaUpload as unknown as ComponentType<MediaUploadProps>;\n\nexport interface MediaLibraryButtonProps {\n\tallowedMimeTypes: string[];\n\tallowedExtensions?: string[];\n\tmultiple: boolean;\n\tvalue: DocumentItem[];\n\tonSelect: (items: DocumentItem[]) => void;\n\tlabels: DocumentPickerLabels;\n\tdisabled?: boolean;\n\tvariant?: 'primary' | 'secondary' | 'tertiary';\n\tlabel?: string;\n}\n\nconst normalize = (\n\traw: RawMedia | RawMedia[],\n\tallowedMimeTypes: string[],\n\tallowedExtensions: string[] | undefined,\n): DocumentItem[] => {\n\tconst list = Array.isArray(raw) ? raw : [raw];\n\treturn list\n\t\t.map((r) => mapMediaToDocumentItem(r as Parameters<typeof mapMediaToDocumentItem>[0]))\n\t\t.filter((item) => matchesAllowed(item, allowedMimeTypes, allowedExtensions));\n};\n\nexport const MediaLibraryButton = ({\n\tallowedMimeTypes,\n\tallowedExtensions,\n\tmultiple,\n\tvalue,\n\tonSelect,\n\tlabels,\n\tdisabled,\n\tvariant = 'secondary',\n\tlabel,\n}: MediaLibraryButtonProps) => {\n\tconst selectedIds = multiple ? value.map((v) => v.id) : value[0]?.id;\n\tconst buttonLabel =\n\t\tlabel ?? labels.browseMediaLibrary ?? __('Browse Media Library', 'valu-block-components');\n\n\treturn (\n\t\t<MediaUpload\n\t\t\tallowedTypes={allowedMimeTypes}\n\t\t\tmultiple={multiple}\n\t\t\tgallery={false}\n\t\t\t{...(selectedIds !== undefined ? { value: selectedIds } : {})}\n\t\t\tonSelect={(selection) => {\n\t\t\t\tconst items = normalize(selection, allowedMimeTypes, allowedExtensions);\n\t\t\t\tif (items.length > 0) onSelect(items);\n\t\t\t}}\n\t\t\trender={({ open }) => (\n\t\t\t\t<Button variant={variant} icon={upload} onClick={open} disabled={disabled}>\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t/>\n\t);\n};\n","import apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\n\nimport type { DocumentItem, RequestContext } from '../types';\nimport { mapMediaToDocumentItem, matchesAllowed } from '../utils';\n\nexport interface FetchDocumentsArgs {\n\tquery: string;\n\tpage: number;\n\tperPage: number;\n\tmimeTypes: string[];\n\tallowedExtensions?: string[];\n\trequest?: (path: string, ctx: RequestContext) => string;\n\tsignal?: AbortSignal;\n}\n\nexport interface FetchDocumentsPage {\n\titems: DocumentItem[];\n\tpage: number;\n\thasMore: boolean;\n\ttotal: number;\n}\n\nconst buildPath = (args: FetchDocumentsArgs): string => {\n\tconst params: Record<string, string | number> = {\n\t\tper_page: args.perPage,\n\t\tpage: args.page,\n\t\t_fields: [\n\t\t\t'id',\n\t\t\t'title',\n\t\t\t'source_url',\n\t\t\t'mime_type',\n\t\t\t'media_details',\n\t\t\t'modified',\n\t\t\t'date',\n\t\t].join(','),\n\t\torder: 'desc',\n\t};\n\t// `search` and `orderby=relevance` only make sense together — WP rejects\n\t// `orderby=relevance` when `search` is empty.\n\tconst trimmed = args.query.trim();\n\tif (trimmed.length > 0) {\n\t\tparams.search = trimmed;\n\t\tparams.orderby = 'relevance';\n\t} else {\n\t\tparams.orderby = 'date';\n\t}\n\t// `/wp/v2/media` types `mime_type` as a string (CSV), not an array. Joining\n\t// avoids `rest_invalid_param` 400s from passing `mime_type[]=…`.\n\tif (args.mimeTypes.length > 0) {\n\t\tparams.mime_type = args.mimeTypes.join(',');\n\t}\n\treturn addQueryArgs('/wp/v2/media', params);\n};\n\nconst parseHeader = (response: Response, key: string): number => {\n\tconst raw = response.headers.get(key);\n\tif (!raw) return 0;\n\tconst parsed = parseInt(raw, 10);\n\treturn Number.isNaN(parsed) ? 0 : parsed;\n};\n\nexport const fetchDocuments = async (\n\targs: FetchDocumentsArgs,\n): Promise<FetchDocumentsPage> => {\n\tconst rawPath = buildPath(args);\n\tconst path = args.request\n\t\t? args.request(rawPath, { query: args.query, page: args.page })\n\t\t: rawPath;\n\n\tconst response = (await apiFetch({\n\t\tpath,\n\t\tparse: false,\n\t\tsignal: args.signal,\n\t} as Parameters<typeof apiFetch>[0])) as Response;\n\n\tconst data = (await response.json()) as unknown[];\n\tconst totalPages = parseHeader(response, 'x-wp-totalpages') || 1;\n\tconst total = parseHeader(response, 'x-wp-total');\n\n\tconst items = (data as Parameters<typeof mapMediaToDocumentItem>[0][])\n\t\t.map(mapMediaToDocumentItem)\n\t\t.filter((item) => matchesAllowed(item, args.mimeTypes, args.allowedExtensions));\n\n\treturn {\n\t\titems,\n\t\tpage: args.page,\n\t\thasMore: args.page < totalPages,\n\t\ttotal,\n\t};\n};\n","import { useInfiniteQuery, keepPreviousData } from '@tanstack/react-query';\n\nimport { fetchDocuments } from '../api/fetchDocuments';\nimport type { RequestContext } from '../types';\n\nexport interface UseDocumentSearchArgs {\n\tquery: string;\n\tmimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tenabled?: boolean;\n\trequest?: (path: string, ctx: RequestContext) => string;\n}\n\nexport const documentSearchKey = (args: UseDocumentSearchArgs) =>\n\t[\n\t\t'valu/document-search',\n\t\t[...args.mimeTypes].sort().join(','),\n\t\t[...(args.allowedExtensions ?? [])].sort().join(','),\n\t\targs.query,\n\t\targs.perPage,\n\t] as const;\n\nexport const useDocumentSearch = (args: UseDocumentSearchArgs) =>\n\tuseInfiniteQuery({\n\t\tqueryKey: documentSearchKey(args),\n\t\tqueryFn: ({ pageParam, signal }) =>\n\t\t\tfetchDocuments({\n\t\t\t\tquery: args.query,\n\t\t\t\tpage: pageParam,\n\t\t\t\tperPage: args.perPage,\n\t\t\t\tmimeTypes: args.mimeTypes,\n\t\t\t\t...(args.allowedExtensions !== undefined\n\t\t\t\t\t? { allowedExtensions: args.allowedExtensions }\n\t\t\t\t\t: {}),\n\t\t\t\t...(args.request !== undefined ? { request: args.request } : {}),\n\t\t\t\tsignal,\n\t\t\t}),\n\t\tinitialPageParam: 1,\n\t\tgetNextPageParam: (last) => (last.hasMore ? last.page + 1 : undefined),\n\t\tenabled: args.enabled ?? true,\n\t\tstaleTime: 30_000,\n\t\tplaceholderData: keepPreviousData,\n\t});\n","import { useEffect, useState } from 'react';\n\nexport const useDebouncedValue = <T,>(value: T, delay: number): T => {\n\tconst [debounced, setDebounced] = useState(value);\n\tuseEffect(() => {\n\t\tconst id = setTimeout(() => setDebounced(value), delay);\n\t\treturn () => clearTimeout(id);\n\t}, [value, delay]);\n\treturn debounced;\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Debounced screen-reader announcements. Prevents spam while a user is\n * typing quickly (each keystroke would otherwise trigger a new \"N results\").\n */\nexport const useLiveRegion = (debounceMs = 500) => {\n\tconst timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (timer.current) clearTimeout(timer.current);\n\t\t},\n\t\t[],\n\t);\n\n\tconst announce = useCallback(\n\t\t(message: string, assertiveness: 'polite' | 'assertive' = 'polite') => {\n\t\t\tif (!message) return;\n\t\t\tif (timer.current) clearTimeout(timer.current);\n\t\t\ttimer.current = setTimeout(() => speak(message, assertiveness), debounceMs);\n\t\t},\n\t\t[debounceMs],\n\t);\n\n\tconst announceImmediate = useCallback(\n\t\t(message: string, assertiveness: 'polite' | 'assertive' = 'polite') => {\n\t\t\tif (!message) return;\n\t\t\tif (timer.current) clearTimeout(timer.current);\n\t\t\tspeak(message, assertiveness);\n\t\t},\n\t\t[],\n\t);\n\n\treturn { announce, announceImmediate };\n};\n","import { useCallback, useState, type KeyboardEvent } from 'react';\n\nexport interface KeyboardNavApi {\n\thighlightedIndex: number;\n\tsetHighlightedIndex: (i: number) => void;\n\treset: () => void;\n\thandleKeyDown: (event: KeyboardEvent) => void;\n}\n\nexport interface UseKeyboardNavArgs {\n\titemCount: number;\n\tonSelect?: (index: number) => void;\n\tonEscape?: () => void;\n\t/** When true, up/down keys wrap at boundaries. */\n\twrap?: boolean;\n}\n\n/**\n * Shared keyboard-navigation state machine for suggestion lists.\n *\n * Arrow Down / Up — move highlight (with optional wrap)\n * Home / End — jump to first / last\n * Enter — onSelect(highlightedIndex) if >= 0\n * Escape — onEscape()\n */\nexport const useKeyboardNav = ({\n\titemCount,\n\tonSelect,\n\tonEscape,\n\twrap = true,\n}: UseKeyboardNavArgs): KeyboardNavApi => {\n\tconst [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n\tconst reset = useCallback(() => setHighlightedIndex(-1), []);\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (itemCount === 0) {\n\t\t\t\tif (event.key === 'Escape') {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonEscape?.();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowDown': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex((i) => {\n\t\t\t\t\t\tconst next = i + 1;\n\t\t\t\t\t\tif (next >= itemCount) return wrap ? 0 : itemCount - 1;\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'ArrowUp': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex((i) => {\n\t\t\t\t\t\tif (i <= 0) return wrap ? itemCount - 1 : 0;\n\t\t\t\t\t\treturn i - 1;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'Home': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex(0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'End': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex(itemCount - 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'Enter': {\n\t\t\t\t\tif (highlightedIndex >= 0 && highlightedIndex < itemCount) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonSelect?.(highlightedIndex);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'Escape': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonEscape?.();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t[itemCount, highlightedIndex, onSelect, onEscape, wrap],\n\t);\n\n\treturn { highlightedIndex, setHighlightedIndex, reset, handleKeyDown };\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { __, _n, sprintf } from '@wordpress/i18n';\n\nimport { useDocumentSearch } from './useDocumentSearch';\nimport { useDebouncedValue } from '../../content-picker/hooks/useDebouncedValue';\nimport { useLiveRegion } from '../../content-picker/hooks/useLiveRegion';\nimport { useKeyboardNav } from '../../content-picker/hooks/useKeyboardNav';\nimport { dedupeAgainst, generateKey, isMaxedOut } from '../utils';\nimport type { DocumentItem, DocumentPickerProps } from '../types';\n\nexport interface DocumentPickerControllerArgs {\n\tmimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tfilter?: DocumentPickerProps['filter'];\n\trequest?: DocumentPickerProps['request'];\n\tvalue: DocumentItem[];\n\tonChange: (items: DocumentItem[]) => void;\n\t/** Whether the suggestion UI is open/visible (controls `enabled`). */\n\tactive: boolean;\n\t/** When true, ignore empty query and fetch anyway. */\n\tfetchEmpty: boolean;\n\tonSelectSideEffect?: () => void;\n\tonEscape?: () => void;\n}\n\nexport interface DocumentPickerController {\n\tquery: string;\n\tsetQuery: (value: string) => void;\n\tdebouncedQuery: string;\n\tsuggestions: DocumentItem[];\n\thighlightedIndex: number;\n\tsetHighlightedIndex: (i: number) => void;\n\thandleKeyDown: (event: React.KeyboardEvent) => void;\n\tloading: boolean;\n\terror: unknown;\n\thasMore: boolean;\n\tloadMore: () => void;\n\tfetchingMore: boolean;\n\tselect: (item: DocumentItem) => void;\n\tselectMany: (items: DocumentItem[]) => void;\n\tremove: (key: string) => void;\n\treorder: (from: number, to: number) => void;\n\treplace: (items: DocumentItem[]) => void;\n\tmaxedOut: boolean;\n\ttotal: number;\n}\n\nexport const useDocumentPickerController = (\n\targs: DocumentPickerControllerArgs,\n): DocumentPickerController => {\n\tconst {\n\t\tmimeTypes,\n\t\tallowedExtensions,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tfilter,\n\t\trequest,\n\t\tvalue,\n\t\tonChange,\n\t\tactive,\n\t\tfetchEmpty,\n\t\tonSelectSideEffect,\n\t\tonEscape,\n\t} = args;\n\n\tconst [query, setQuery] = useState('');\n\tconst debouncedQuery = useDebouncedValue(query, inputDelayMs);\n\n\tconst enabled = active && (fetchEmpty || debouncedQuery.trim().length > 0);\n\n\tconst query_ = useDocumentSearch({\n\t\tquery: debouncedQuery,\n\t\tmimeTypes,\n\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\tperPage,\n\t\tenabled,\n\t\t...(request !== undefined ? { request } : {}),\n\t});\n\n\tconst suggestions = useMemo(() => {\n\t\tif (!query_.data) return [];\n\t\tconst flat = query_.data.pages.flatMap((p) => p.items);\n\t\tlet filtered = dedupeAgainst(flat, value, uniqueItems);\n\t\tif (filter) {\n\t\t\tfiltered = filter(filtered, { query: debouncedQuery });\n\t\t}\n\t\treturn filtered;\n\t}, [query_.data, value, uniqueItems, filter, debouncedQuery]);\n\n\tconst { announce, announceImmediate } = useLiveRegion();\n\n\tuseEffect(() => {\n\t\tif (!active) return;\n\t\tif (debouncedQuery.trim().length === 0 && !fetchEmpty) return;\n\t\tif (query_.isFetching) return;\n\t\tif (query_.isError) {\n\t\t\tannounce(__('Search failed. Try again.', 'valu-block-components'));\n\t\t\treturn;\n\t\t}\n\t\tconst count = suggestions.length;\n\t\tannounce(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %d: number of search results */\n\t\t\t\t_n('%d document found', '%d documents found', count, 'valu-block-components'),\n\t\t\t\tcount,\n\t\t\t),\n\t\t);\n\t}, [\n\t\tsuggestions.length,\n\t\tquery_.isFetching,\n\t\tquery_.isError,\n\t\tactive,\n\t\tdebouncedQuery,\n\t\tfetchEmpty,\n\t\tannounce,\n\t]);\n\n\tconst maxedOut = isMaxedOut(value, maxItems);\n\n\tconst replace = useCallback((items: DocumentItem[]) => onChange(items), [onChange]);\n\n\tconst selectMany = useCallback(\n\t\t(items: DocumentItem[]) => {\n\t\t\tif (items.length === 0) return;\n\t\t\tconst limited = maxItems === 1;\n\t\t\tconst normalized = items.map((item) => ({\n\t\t\t\t...item,\n\t\t\t\tkey: item.key && item.key.length > 0 ? item.key : generateKey(),\n\t\t\t}));\n\n\t\t\tif (limited) {\n\t\t\t\tconst next = [normalized[normalized.length - 1]!];\n\t\t\t\tonChange(next);\n\t\t\t\tannounceImmediate(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: document title */\n\t\t\t\t\t\t__('Selected %s.', 'valu-block-components'),\n\t\t\t\t\t\tnext[0]!.title,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tonSelectSideEffect?.();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst existingIds = new Set(value.map((v) => v.id));\n\t\t\tconst remaining = Number.isFinite(maxItems)\n\t\t\t\t? Math.max(0, maxItems - value.length)\n\t\t\t\t: normalized.length;\n\t\t\tconst toAdd = (uniqueItems\n\t\t\t\t? normalized.filter((n) => !existingIds.has(n.id))\n\t\t\t\t: normalized\n\t\t\t).slice(0, remaining);\n\t\t\tif (toAdd.length === 0) return;\n\t\t\tconst next = [...value, ...toAdd];\n\t\t\tonChange(next);\n\t\t\tannounceImmediate(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: 1: number added, 2: total selected */\n\t\t\t\t\t_n(\n\t\t\t\t\t\t'Added %1$d document. %2$d selected.',\n\t\t\t\t\t\t'Added %1$d documents. %2$d selected.',\n\t\t\t\t\t\ttoAdd.length,\n\t\t\t\t\t\t'valu-block-components',\n\t\t\t\t\t),\n\t\t\t\t\ttoAdd.length,\n\t\t\t\t\tnext.length,\n\t\t\t\t),\n\t\t\t);\n\t\t\tonSelectSideEffect?.();\n\t\t},\n\t\t[maxItems, value, uniqueItems, onChange, announceImmediate, onSelectSideEffect],\n\t);\n\n\tconst select = useCallback(\n\t\t(item: DocumentItem) => {\n\t\t\tif (maxedOut && maxItems !== 1) return;\n\t\t\tselectMany([item]);\n\t\t},\n\t\t[maxedOut, maxItems, selectMany],\n\t);\n\n\tconst remove = useCallback(\n\t\t(key: string) => {\n\t\t\tconst target = value.find((i) => i.key === key);\n\t\t\tconst next = value.filter((i) => i.key !== key);\n\t\t\tonChange(next);\n\t\t\tif (target) {\n\t\t\t\tannounceImmediate(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: title of the removed document */\n\t\t\t\t\t\t__('Removed %s.', 'valu-block-components'),\n\t\t\t\t\t\ttarget.title,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[value, onChange, announceImmediate],\n\t);\n\n\tconst reorder = useCallback(\n\t\t(from: number, to: number) => {\n\t\t\tif (from === to || from < 0 || to < 0 || from >= value.length || to >= value.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst next = value.slice();\n\t\t\tconst [moved] = next.splice(from, 1);\n\t\t\tnext.splice(to, 0, moved!);\n\t\t\tonChange(next);\n\t\t\tannounceImmediate(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: 1: title, 2: position, 3: total */\n\t\t\t\t\t__('Moved %1$s to position %2$d of %3$d.', 'valu-block-components'),\n\t\t\t\t\tmoved!.title,\n\t\t\t\t\tto + 1,\n\t\t\t\t\tnext.length,\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[value, onChange, announceImmediate],\n\t);\n\n\tconst {\n\t\thighlightedIndex,\n\t\tsetHighlightedIndex,\n\t\treset: resetHighlight,\n\t\thandleKeyDown,\n\t} = useKeyboardNav({\n\t\titemCount: suggestions.length,\n\t\tonSelect: (i) => {\n\t\t\tconst item = suggestions[i];\n\t\t\tif (item) select(item);\n\t\t},\n\t\t...(onEscape !== undefined ? { onEscape } : {}),\n\t});\n\n\tuseEffect(() => {\n\t\tresetHighlight();\n\t}, [debouncedQuery, resetHighlight]);\n\n\treturn {\n\t\tquery,\n\t\tsetQuery,\n\t\tdebouncedQuery,\n\t\tsuggestions,\n\t\thighlightedIndex,\n\t\tsetHighlightedIndex,\n\t\thandleKeyDown,\n\t\tloading: query_.isFetching && !query_.data,\n\t\terror: query_.error,\n\t\thasMore: Boolean(query_.hasNextPage),\n\t\tloadMore: () => {\n\t\t\tif (query_.hasNextPage && !query_.isFetchingNextPage) void query_.fetchNextPage();\n\t\t},\n\t\tfetchingMore: query_.isFetchingNextPage,\n\t\tselect,\n\t\tselectMany,\n\t\tremove,\n\t\treorder,\n\t\treplace,\n\t\tmaxedOut,\n\t\ttotal: query_.data?.pages[0]?.total ?? 0,\n\t};\n};\n","import { useCallback, useMemo, useState, type ReactNode } from 'react';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\n\n/**\n * Creates an Emotion cache scoped to this component.\n *\n * Two reasons this exists:\n *\n * 1. The WordPress site editor renders blocks inside an iframe. The default\n * Emotion cache targets `document.head` of the top frame, so styles\n * never reach the iframe. We capture the owning document via a callback\n * ref and build the cache pointing at the correct `<head>`.\n * 2. A unique cache key per component prevents class-name collisions with\n * a consumer's own Emotion instance.\n */\nexport const EmotionCacheProvider = ({ children }: { children: ReactNode }) => {\n\tconst [head, setHead] = useState<HTMLElement | null>(null);\n\n\tconst captureDocument = useCallback((node: HTMLDivElement | null) => {\n\t\tif (!node) return;\n\t\tconst owner = node.ownerDocument ?? document;\n\t\tsetHead((prev) => (prev === owner.head ? prev : (owner.head as HTMLElement)));\n\t}, []);\n\n\tconst cache = useMemo(() => {\n\t\tif (!head) return null;\n\t\treturn createCache({ key: 'valu-cp', container: head, prepend: true });\n\t}, [head]);\n\n\tif (!cache) {\n\t\t// First render: emit a hidden probe so we can read ownerDocument. No\n\t\t// styled content has a chance to render yet, so nothing ends up in\n\t\t// the wrong head.\n\t\treturn <div ref={captureDocument} style={{ display: 'contents' }} />;\n\t}\n\n\treturn (\n\t\t<CacheProvider value={cache}>\n\t\t\t<div ref={captureDocument} style={{ display: 'contents' }}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</CacheProvider>\n\t);\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Popover } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nimport { SearchCombobox } from './SearchCombobox';\nimport { SuggestionList } from './SuggestionList';\nimport { MediaLibraryButton } from './MediaLibraryButton';\nimport { useDocumentPickerController } from './hooks/useDocumentPickerController';\nimport { aria } from './utils';\nimport { ActionsRow, MaxedOutBanner } from './styles';\nimport { EmotionCacheProvider } from '../content-picker/styles/emotionCache';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tDocumentPickerProps,\n} from './types';\n\nexport interface DocumentPickerPopoverProps {\n\trootId: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tplaceholder?: string;\n\tallowedMimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tfetchOnOpen: boolean;\n\tenableMediaLibrary: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tfilter?: DocumentPickerProps['filter'];\n\trequest?: DocumentPickerProps['request'];\n\trenderSuggestion?: DocumentPickerProps['renderSuggestion'];\n\tvalue: DocumentItem[];\n\tonChange: (items: DocumentItem[]) => void;\n\tlabels: DocumentPickerLabels;\n}\n\nexport const DocumentPickerPopover = (props: DocumentPickerPopoverProps) => {\n\tconst {\n\t\trootId,\n\t\tlabel,\n\t\thideLabelFromVision,\n\t\thelp,\n\t\tplaceholder,\n\t\tallowedMimeTypes,\n\t\tallowedExtensions,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tfetchOnOpen,\n\t\tenableMediaLibrary,\n\t\tshowExtensionBadge,\n\t\tshowFileSize,\n\t\tshowModifiedDate,\n\t\tfilter,\n\t\trequest,\n\t\trenderSuggestion,\n\t\tvalue,\n\t\tonChange,\n\t\tlabels,\n\t} = props;\n\n\tconst [open, setOpen] = useState(false);\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst popoverBodyRef = useRef<HTMLDivElement | null>(null);\n\tconst clearQueryRef = useRef<(() => void) | null>(null);\n\n\tconst controller = useDocumentPickerController({\n\t\tmimeTypes: allowedMimeTypes,\n\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\t...(filter !== undefined ? { filter } : {}),\n\t\t...(request !== undefined ? { request } : {}),\n\t\tvalue,\n\t\tonChange,\n\t\tactive: open,\n\t\tfetchEmpty: fetchOnOpen,\n\t\tonSelectSideEffect: () => {\n\t\t\tif (maxItems === 1) {\n\t\t\t\tsetOpen(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearQueryRef.current?.();\n\t\t\trequestAnimationFrame(() => inputRef.current?.focus());\n\t\t},\n\t\tonEscape: () => {\n\t\t\tsetOpen(false);\n\t\t\trequestAnimationFrame(() => inputRef.current?.focus());\n\t\t},\n\t});\n\n\tclearQueryRef.current = () => controller.setQuery('');\n\n\tconst listboxId = aria(rootId, 'listbox');\n\n\tconst activeOptionId =\n\t\tcontroller.highlightedIndex >= 0\n\t\t\t? aria(rootId, `option-${controller.highlightedIndex}`)\n\t\t\t: undefined;\n\n\tconst selectedKeys = useMemo(() => new Set(value.map((v) => v.key)), [value]);\n\n\tconst handleFocus = useCallback(() => {\n\t\tif (!controller.maxedOut) setOpen(true);\n\t}, [controller.maxedOut]);\n\n\tuseEffect(() => {\n\t\tif (controller.maxedOut) setOpen(false);\n\t}, [controller.maxedOut]);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\n\t\tconst handlePointerDown = (event: MouseEvent) => {\n\t\t\tconst target = event.target as Node | null;\n\t\t\tif (!target) return;\n\t\t\tconst input = inputRef.current;\n\t\t\tconst body = popoverBodyRef.current;\n\t\t\tconst anchorContainer = input?.closest('div') ?? input;\n\t\t\tif (anchorContainer && anchorContainer.contains(target)) return;\n\t\t\tif (body && body.contains(target)) return;\n\t\t\tsetOpen(false);\n\t\t};\n\n\t\tconst docs = new Set<Document>();\n\t\tif (typeof document !== 'undefined') docs.add(document);\n\t\tconst inputDoc = inputRef.current?.ownerDocument;\n\t\tif (inputDoc) docs.add(inputDoc);\n\n\t\tdocs.forEach((d) => d.addEventListener('mousedown', handlePointerDown, true));\n\t\treturn () => {\n\t\t\tdocs.forEach((d) => d.removeEventListener('mousedown', handlePointerDown, true));\n\t\t};\n\t}, [open]);\n\n\tconst disabled = controller.maxedOut;\n\n\treturn (\n\t\t<div style={{ position: 'relative' }}>\n\t\t\t<SearchCombobox\n\t\t\t\tref={inputRef}\n\t\t\t\trootId={rootId}\n\t\t\t\tvalue={controller.query}\n\t\t\t\tonChange={(next) => {\n\t\t\t\t\tcontroller.setQuery(next);\n\t\t\t\t\tif (!open && !disabled) setOpen(true);\n\t\t\t\t}}\n\t\t\t\tonFocus={handleFocus}\n\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\tif (event.key === 'ArrowDown' && !open && !disabled) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontroller.handleKeyDown(event);\n\t\t\t\t}}\n\t\t\t\t{...(placeholder !== undefined ? { placeholder } : {})}\n\t\t\t\tlabel={label}\n\t\t\t\thideLabelFromVision={hideLabelFromVision}\n\t\t\t\t{...(help !== undefined ? { help } : {})}\n\t\t\t\tdisabled={disabled}\n\t\t\t\topen={open && !disabled}\n\t\t\t\tlistboxId={listboxId}\n\t\t\t\t{...(activeOptionId !== undefined ? { activeOptionId } : {})}\n\t\t\t\tlabels={labels}\n\t\t\t/>\n\t\t\t{enableMediaLibrary ? (\n\t\t\t\t<ActionsRow>\n\t\t\t\t\t<MediaLibraryButton\n\t\t\t\t\t\tallowedMimeTypes={allowedMimeTypes}\n\t\t\t\t\t\t{...(allowedExtensions !== undefined ? { allowedExtensions } : {})}\n\t\t\t\t\t\tmultiple={maxItems !== 1}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonSelect={(items) => controller.selectMany(items)}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</ActionsRow>\n\t\t\t) : null}\n\t\t\t{disabled ? (\n\t\t\t\t<MaxedOutBanner role=\"status\" style={{ marginTop: 8 }}>\n\t\t\t\t\t{labels.limitReached ?? __('Selection limit reached.', 'valu-block-components')}\n\t\t\t\t</MaxedOutBanner>\n\t\t\t) : null}\n\t\t\t{open && !disabled && inputRef.current ? (\n\t\t\t\t<Popover\n\t\t\t\t\tanchor={inputRef.current.closest('div') ?? inputRef.current}\n\t\t\t\t\tplacement=\"bottom-start\"\n\t\t\t\t\tfocusOnMount={false}\n\t\t\t\t\tonClose={() => setOpen(false)}\n\t\t\t\t\tonFocusOutside={() => setOpen(false)}\n\t\t\t\t\tshift\n\t\t\t\t\tflip\n\t\t\t\t\tresize\n\t\t\t\t\toffset={4}\n\t\t\t\t\tclassName=\"valu-document-picker__popover\"\n\t\t\t\t>\n\t\t\t\t\t<EmotionCacheProvider>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={popoverBodyRef}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tminWidth: inputRef.current.offsetWidth,\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SuggestionList\n\t\t\t\t\t\t\t\tlistboxId={listboxId}\n\t\t\t\t\t\t\t\trootId={rootId}\n\t\t\t\t\t\t\t\tsuggestions={controller.suggestions}\n\t\t\t\t\t\t\t\tloading={controller.loading}\n\t\t\t\t\t\t\t\tfetchingMore={controller.fetchingMore}\n\t\t\t\t\t\t\t\thasMore={controller.hasMore}\n\t\t\t\t\t\t\t\terror={controller.error}\n\t\t\t\t\t\t\t\tquery={controller.debouncedQuery}\n\t\t\t\t\t\t\t\thighlightedIndex={controller.highlightedIndex}\n\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t\t\t\t{...(renderSuggestion ? { renderSuggestion } : {})}\n\t\t\t\t\t\t\t\tonHover={(i) => controller.setHighlightedIndex(i)}\n\t\t\t\t\t\t\t\tonSelect={(item) => controller.select(item)}\n\t\t\t\t\t\t\t\tonLoadMore={() => controller.loadMore()}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</EmotionCacheProvider>\n\t\t\t\t</Popover>\n\t\t\t) : null}\n\t\t</div>\n\t);\n};\n","import { useMemo, useRef } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { SearchCombobox } from './SearchCombobox';\nimport { SuggestionList } from './SuggestionList';\nimport { MediaLibraryButton } from './MediaLibraryButton';\nimport { useDocumentPickerController } from './hooks/useDocumentPickerController';\nimport { aria } from './utils';\nimport { ActionsRow, MaxedOutBanner, SuggestionsShell } from './styles';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tDocumentPickerProps,\n} from './types';\n\nexport interface DocumentPickerInlineProps {\n\trootId: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tplaceholder?: string;\n\tallowedMimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tfetchOnOpen: boolean;\n\tenableMediaLibrary: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tfilter?: DocumentPickerProps['filter'];\n\trequest?: DocumentPickerProps['request'];\n\trenderSuggestion?: DocumentPickerProps['renderSuggestion'];\n\tvalue: DocumentItem[];\n\tonChange: (items: DocumentItem[]) => void;\n\tlabels: DocumentPickerLabels;\n}\n\nexport const DocumentPickerInline = (props: DocumentPickerInlineProps) => {\n\tconst {\n\t\trootId,\n\t\tlabel,\n\t\thideLabelFromVision,\n\t\thelp,\n\t\tplaceholder,\n\t\tallowedMimeTypes,\n\t\tallowedExtensions,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tfetchOnOpen,\n\t\tenableMediaLibrary,\n\t\tshowExtensionBadge,\n\t\tshowFileSize,\n\t\tshowModifiedDate,\n\t\tfilter,\n\t\trequest,\n\t\trenderSuggestion,\n\t\tvalue,\n\t\tonChange,\n\t\tlabels,\n\t} = props;\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst clearQueryRef = useRef<(() => void) | null>(null);\n\n\tconst controller = useDocumentPickerController({\n\t\tmimeTypes: allowedMimeTypes,\n\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\t...(filter !== undefined ? { filter } : {}),\n\t\t...(request !== undefined ? { request } : {}),\n\t\tvalue,\n\t\tonChange,\n\t\tactive: true,\n\t\tfetchEmpty: fetchOnOpen || value.length === 0,\n\t\tonSelectSideEffect: () => {\n\t\t\tclearQueryRef.current?.();\n\t\t\trequestAnimationFrame(() => inputRef.current?.focus());\n\t\t},\n\t});\n\n\tclearQueryRef.current = () => controller.setQuery('');\n\n\tconst listboxId = aria(rootId, 'listbox');\n\tconst activeOptionId =\n\t\tcontroller.highlightedIndex >= 0\n\t\t\t? aria(rootId, `option-${controller.highlightedIndex}`)\n\t\t\t: undefined;\n\n\tconst selectedKeys = useMemo(() => new Set(value.map((v) => v.key)), [value]);\n\n\tconst disabled = controller.maxedOut;\n\tconst shouldShowList =\n\t\t!disabled &&\n\t\t(controller.debouncedQuery.trim().length > 0 ||\n\t\t\tfetchOnOpen ||\n\t\t\tvalue.length === 0);\n\n\treturn (\n\t\t<div>\n\t\t\t<SearchCombobox\n\t\t\t\tref={inputRef}\n\t\t\t\trootId={rootId}\n\t\t\t\tvalue={controller.query}\n\t\t\t\tonChange={(next) => controller.setQuery(next)}\n\t\t\t\tonKeyDown={controller.handleKeyDown}\n\t\t\t\t{...(placeholder !== undefined ? { placeholder } : {})}\n\t\t\t\tlabel={label}\n\t\t\t\thideLabelFromVision={hideLabelFromVision}\n\t\t\t\t{...(help !== undefined ? { help } : {})}\n\t\t\t\tdisabled={disabled}\n\t\t\t\topen={shouldShowList}\n\t\t\t\tlistboxId={listboxId}\n\t\t\t\t{...(activeOptionId !== undefined ? { activeOptionId } : {})}\n\t\t\t\tlabels={labels}\n\t\t\t/>\n\t\t\t{enableMediaLibrary ? (\n\t\t\t\t<ActionsRow>\n\t\t\t\t\t<MediaLibraryButton\n\t\t\t\t\t\tallowedMimeTypes={allowedMimeTypes}\n\t\t\t\t\t\t{...(allowedExtensions !== undefined ? { allowedExtensions } : {})}\n\t\t\t\t\t\tmultiple={maxItems !== 1}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonSelect={(items) => controller.selectMany(items)}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</ActionsRow>\n\t\t\t) : null}\n\t\t\t{disabled ? (\n\t\t\t\t<MaxedOutBanner role=\"status\" style={{ marginTop: 8 }}>\n\t\t\t\t\t{labels.limitReached ?? __('Selection limit reached.', 'valu-block-components')}\n\t\t\t\t</MaxedOutBanner>\n\t\t\t) : null}\n\t\t\t{shouldShowList ? (\n\t\t\t\t<SuggestionsShell inline style={{ marginTop: 8 }}>\n\t\t\t\t\t<SuggestionList\n\t\t\t\t\t\tlistboxId={listboxId}\n\t\t\t\t\t\trootId={rootId}\n\t\t\t\t\t\tsuggestions={controller.suggestions}\n\t\t\t\t\t\tloading={controller.loading}\n\t\t\t\t\t\tfetchingMore={controller.fetchingMore}\n\t\t\t\t\t\thasMore={controller.hasMore}\n\t\t\t\t\t\terror={controller.error}\n\t\t\t\t\t\tquery={controller.debouncedQuery}\n\t\t\t\t\t\thighlightedIndex={controller.highlightedIndex}\n\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t\t{...(renderSuggestion ? { renderSuggestion } : {})}\n\t\t\t\t\t\tonHover={(i) => controller.setHighlightedIndex(i)}\n\t\t\t\t\t\tonSelect={(item) => controller.select(item)}\n\t\t\t\t\t\tonLoadMore={() => controller.loadMore()}\n\t\t\t\t\t/>\n\t\t\t\t</SuggestionsShell>\n\t\t\t) : null}\n\t\t</div>\n\t);\n};\n","import { type CSSProperties, type ReactNode } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { Button, Icon } from '@wordpress/components';\nimport {\n\tcaution,\n\tchevronDown,\n\tchevronUp,\n\tcloseSmall,\n\tdragHandle,\n} from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport {\n\tActionColumn,\n\tDocMetaInline,\n\tDocRowBody,\n\tDragHandleButton,\n\tFilenameText,\n\tPrimaryText,\n\tSelectedRow,\n} from './styles';\nimport { ExtensionBadge } from './badges/ExtensionBadge';\nimport { formatFileSize, formatModified } from './utils';\nimport type { DocumentPickerLabels, ResolvedDocumentItem } from './types';\n\nexport interface SelectedItemProps {\n\titem: ResolvedDocumentItem;\n\tindex: number;\n\ttotal: number;\n\torderable: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tlabels: DocumentPickerLabels;\n\tonRemove: () => void;\n\tonMoveUp?: () => void;\n\tonMoveDown?: () => void;\n\trender?: (item: ResolvedDocumentItem) => ReactNode;\n}\n\nexport const SelectedItem = ({\n\titem,\n\tindex,\n\ttotal,\n\torderable,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n\tlabels,\n\tonRemove,\n\tonMoveUp,\n\tonMoveDown,\n\trender,\n}: SelectedItemProps) => {\n\tconst { attributes, listeners, setNodeRef, transform, transition, isDragging } =\n\t\tuseSortable({\n\t\t\tid: item.key,\n\t\t\tdisabled: !orderable,\n\t\t});\n\n\tconst style: CSSProperties = {\n\t\ttransform: CSS.Translate.toString(transform),\n\t\ttransition,\n\t\topacity: isDragging ? 0 : 1,\n\t};\n\n\tconst isMissing = item.missing === 'deleted';\n\tconst missingLabel =\n\t\tlabels.missing ?? __('This document is no longer available.', 'valu-block-components');\n\n\tconst removeLabel = labels.remove\n\t\t? labels.remove\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: document title */\n\t\t\t\t__('Remove %s', 'valu-block-components'),\n\t\t\t\titem.title,\n\t\t\t);\n\tconst moveUpLabel = labels.moveUp\n\t\t? labels.moveUp\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: document title */\n\t\t\t\t__('Move %s up', 'valu-block-components'),\n\t\t\t\titem.title,\n\t\t\t);\n\tconst moveDownLabel = labels.moveDown\n\t\t? labels.moveDown\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: document title */\n\t\t\t\t__('Move %s down', 'valu-block-components'),\n\t\t\t\titem.title,\n\t\t\t);\n\n\tconst modified = showModifiedDate ? formatModified(item.modified) : '';\n\n\treturn (\n\t\t<SelectedRow\n\t\t\tref={setNodeRef}\n\t\t\tstyle={style}\n\t\t\tdragging={isDragging}\n\t\t\tmissing={isMissing}\n\t\t\taria-setsize={total}\n\t\t\taria-posinset={index + 1}\n\t\t>\n\t\t\t{orderable ? (\n\t\t\t\t<DragHandleButton\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={labels.dragHandle ?? __('Reorder item', 'valu-block-components')}\n\t\t\t\t\t{...attributes}\n\t\t\t\t\t{...listeners}\n\t\t\t\t>\n\t\t\t\t\t<Icon icon={dragHandle} size={14} />\n\t\t\t\t</DragHandleButton>\n\t\t\t) : null}\n\t\t\t{isMissing ? (\n\t\t\t\t<Icon icon={caution} size={20} />\n\t\t\t) : showExtensionBadge ? (\n\t\t\t\t<ExtensionBadge extension={item.extension} />\n\t\t\t) : null}\n\t\t\t{render ? (\n\t\t\t\trender(item)\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<DocRowBody>\n\t\t\t\t\t\t<PrimaryText muted={isMissing} title={item.title}>\n\t\t\t\t\t\t\t{isMissing ? missingLabel : item.title}\n\t\t\t\t\t\t</PrimaryText>\n\t\t\t\t\t\t{!isMissing ? (\n\t\t\t\t\t\t\t<FilenameText title={item.filename}>{item.filename}</FilenameText>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</DocRowBody>\n\t\t\t\t\t{!isMissing && (showFileSize || modified) ? (\n\t\t\t\t\t\t<DocMetaInline>\n\t\t\t\t\t\t\t{showFileSize && item.fileSize ? (\n\t\t\t\t\t\t\t\t<span>{formatFileSize(item.fileSize)}</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{modified ? <span>{modified}</span> : null}\n\t\t\t\t\t\t</DocMetaInline>\n\t\t\t\t\t) : null}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t<ActionColumn>\n\t\t\t\t{orderable ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\ticon={chevronUp}\n\t\t\t\t\t\t\tlabel={moveUpLabel}\n\t\t\t\t\t\t\tonClick={onMoveUp}\n\t\t\t\t\t\t\tdisabled={index === 0 || !onMoveUp}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\ticon={chevronDown}\n\t\t\t\t\t\t\tlabel={moveDownLabel}\n\t\t\t\t\t\t\tonClick={onMoveDown}\n\t\t\t\t\t\t\tdisabled={index === total - 1 || !onMoveDown}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\ticon={closeSmall}\n\t\t\t\t\tlabel={removeLabel}\n\t\t\t\t\tonClick={onRemove}\n\t\t\t\t\tisDestructive\n\t\t\t\t/>\n\t\t\t</ActionColumn>\n\t\t</SelectedRow>\n\t);\n};\n","import { Icon } from '@wordpress/components';\nimport { dragHandle } from '@wordpress/icons';\n\nimport { ChipTitle, ChipWrap } from './styles';\n\nexport interface DragChipProps {\n\ttitle: string;\n}\n\nexport const DragChip = ({ title }: DragChipProps) => (\n\t<ChipWrap>\n\t\t<Icon icon={dragHandle} size={16} />\n\t\t<ChipTitle>{title}</ChipTitle>\n\t</ChipWrap>\n);\n","import { useMemo } from 'react';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\nimport type { DocumentItem, ResolvedDocumentItem } from '../types';\nimport { mapMediaToDocumentItem } from '../utils';\n\n/**\n * Hydrate picked documents from core-data. If a record is missing after\n * resolution finishes, flag it with `missing: 'deleted'`. When the record\n * is found, refresh title/url/extension/size from the live record.\n */\nexport const useResolvedDocuments = (value: DocumentItem[]): ResolvedDocumentItem[] => {\n\tconst records = useSelect(\n\t\t(select) => {\n\t\t\tconst core = select(coreStore);\n\t\t\tconst out: Record<number, { record: unknown; resolved: boolean }> = {};\n\t\t\tfor (const item of value) {\n\t\t\t\tconst record = core.getEntityRecord('postType', 'attachment', item.id);\n\t\t\t\tconst resolved = core.hasFinishedResolution('getEntityRecord', [\n\t\t\t\t\t'postType',\n\t\t\t\t\t'attachment',\n\t\t\t\t\titem.id,\n\t\t\t\t]);\n\t\t\t\tout[item.id] = { record: record ?? null, resolved };\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\t[value],\n\t);\n\n\treturn useMemo(\n\t\t() =>\n\t\t\tvalue.map((item): ResolvedDocumentItem => {\n\t\t\t\tconst entry = records[item.id];\n\t\t\t\tif (!entry) return item;\n\t\t\t\tconst { record, resolved } = entry;\n\t\t\t\tif (!resolved) return item;\n\t\t\t\tif (!record) return { ...item, missing: 'deleted' };\n\t\t\t\tconst fresh = mapMediaToDocumentItem(\n\t\t\t\t\trecord as Parameters<typeof mapMediaToDocumentItem>[0],\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\t...item,\n\t\t\t\t\ttitle: fresh.title || item.title,\n\t\t\t\t\tfilename: fresh.filename || item.filename,\n\t\t\t\t\turl: fresh.url || item.url,\n\t\t\t\t\tmimeType: fresh.mimeType || item.mimeType,\n\t\t\t\t\textension: fresh.extension || item.extension,\n\t\t\t\t\tfileSize: fresh.fileSize ?? item.fileSize,\n\t\t\t\t\tmodified: fresh.modified ?? item.modified,\n\t\t\t\t};\n\t\t\t}),\n\t\t[value, records],\n\t);\n};\n","import { useCallback, useMemo, useState, type ReactNode } from 'react';\nimport {\n\tDndContext,\n\tDragOverlay,\n\tMouseSensor,\n\tTouchSensor,\n\tKeyboardSensor,\n\tclosestCenter,\n\tuseSensor,\n\tuseSensors,\n\tdefaultDropAnimation,\n\ttype DragEndEvent,\n\ttype DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n\tSortableContext,\n\tarrayMove,\n\tsortableKeyboardCoordinates,\n\tverticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { SelectedItem } from './SelectedItem';\nimport { DragChip } from '../content-picker/DragChip';\nimport { useResolvedDocuments } from './hooks/useResolvedDocuments';\nimport {\n\tCountPill,\n\tHeaderRow,\n\tHeaderTitle,\n\tSelectedListEl,\n} from './styles';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tResolvedDocumentItem,\n} from './types';\n\nexport interface SelectedListProps {\n\tvalue: DocumentItem[];\n\torderable: boolean;\n\tmaxItems: number;\n\tlabels: DocumentPickerLabels;\n\tonChange: (next: DocumentItem[]) => void;\n\trenderSelected?: (item: ResolvedDocumentItem) => ReactNode;\n\tshowHeader?: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n}\n\nexport const SelectedList = ({\n\tvalue,\n\torderable,\n\tmaxItems,\n\tlabels,\n\tonChange,\n\trenderSelected,\n\tshowHeader = true,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n}: SelectedListProps) => {\n\tconst resolved = useResolvedDocuments(value);\n\tconst [activeKey, setActiveKey] = useState<string | null>(null);\n\n\tconst sensors = useSensors(\n\t\tuseSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n\t\tuseSensor(TouchSensor, { activationConstraint: { delay: 200, tolerance: 6 } }),\n\t\tuseSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n\t);\n\n\tconst ids = useMemo(() => resolved.map((i) => i.key), [resolved]);\n\tconst activeItem = activeKey ? resolved.find((i) => i.key === activeKey) : null;\n\n\tconst remove = useCallback(\n\t\t(key: string) => onChange(value.filter((i) => i.key !== key)),\n\t\t[value, onChange],\n\t);\n\n\tconst reorder = useCallback(\n\t\t(from: number, to: number) => {\n\t\t\tif (from === to) return;\n\t\t\tonChange(arrayMove(value, from, to));\n\t\t},\n\t\t[value, onChange],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(event: DragStartEvent) => setActiveKey(String(event.active.id)),\n\t\t[],\n\t);\n\n\tconst handleDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tsetActiveKey(null);\n\t\t\tconst { active, over } = event;\n\t\t\tif (!over || active.id === over.id) return;\n\t\t\tconst from = ids.indexOf(String(active.id));\n\t\t\tconst to = ids.indexOf(String(over.id));\n\t\t\tif (from >= 0 && to >= 0) reorder(from, to);\n\t\t},\n\t\t[ids, reorder],\n\t);\n\n\tif (resolved.length === 0) return null;\n\n\tconst isSingleSelect = maxItems === 1;\n\tconst shouldShowHeader = showHeader && !isSingleSelect;\n\n\tconst header = shouldShowHeader ? (\n\t\t<HeaderRow>\n\t\t\t<HeaderTitle>\n\t\t\t\t{resolved.length === 1\n\t\t\t\t\t? (labels.selectedSingular ?? __('Selected', 'valu-block-components'))\n\t\t\t\t\t: (labels.selectedPlural ?? __('Selected', 'valu-block-components'))}\n\t\t\t</HeaderTitle>\n\t\t\t<CountPill aria-hidden=\"true\">\n\t\t\t\t{Number.isFinite(maxItems)\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t/* translators: 1: current count, 2: max count */\n\t\t\t\t\t\t\t'%1$d / %2$d',\n\t\t\t\t\t\t\tresolved.length,\n\t\t\t\t\t\t\tmaxItems,\n\t\t\t\t\t\t)\n\t\t\t\t\t: String(resolved.length)}\n\t\t\t</CountPill>\n\t\t</HeaderRow>\n\t) : null;\n\n\tconst rows = resolved.map((item, index) => (\n\t\t<SelectedItem\n\t\t\tkey={item.key}\n\t\t\titem={item}\n\t\t\tindex={index}\n\t\t\ttotal={resolved.length}\n\t\t\torderable={orderable}\n\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\tshowFileSize={showFileSize}\n\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\tlabels={labels}\n\t\t\tonRemove={() => remove(item.key)}\n\t\t\t{...(index > 0 ? { onMoveUp: () => reorder(index, index - 1) } : {})}\n\t\t\t{...(index < resolved.length - 1\n\t\t\t\t? { onMoveDown: () => reorder(index, index + 1) }\n\t\t\t\t: {})}\n\t\t\t{...(renderSelected ? { render: renderSelected } : {})}\n\t\t/>\n\t));\n\n\tif (!orderable) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{header}\n\t\t\t\t<SelectedListEl role=\"list\">{rows}</SelectedListEl>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{header}\n\t\t\t<DndContext\n\t\t\t\tsensors={sensors}\n\t\t\t\tcollisionDetection={closestCenter}\n\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\tonDragCancel={() => setActiveKey(null)}\n\t\t\t>\n\t\t\t\t<SortableContext items={ids} strategy={verticalListSortingStrategy}>\n\t\t\t\t\t<SelectedListEl role=\"list\">{rows}</SelectedListEl>\n\t\t\t\t</SortableContext>\n\t\t\t\t<DragOverlay dropAnimation={defaultDropAnimation}>\n\t\t\t\t\t{activeItem ? <DragChip title={activeItem.title} /> : null}\n\t\t\t\t</DragOverlay>\n\t\t\t</DndContext>\n\t\t</>\n\t);\n};\n","import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n\nimport { DocumentPickerPopover } from './DocumentPickerPopover';\nimport { DocumentPickerInline } from './DocumentPickerInline';\nimport { SelectedList } from './SelectedList';\nimport { MediaLibraryButton } from './MediaLibraryButton';\nimport { EmotionCacheProvider } from '../content-picker/styles/emotionCache';\nimport { ActionsRow, Root } from './styles';\nimport { DEFAULT_DOCUMENT_MIME_TYPES } from './utils';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tDocumentPickerProps,\n} from './types';\n\nconst DEFAULT_LABELS: DocumentPickerLabels = {};\nconst DEFAULT_MIME = [...DEFAULT_DOCUMENT_MIME_TYPES];\n\nconst makeQueryClient = () =>\n\tnew QueryClient({\n\t\tdefaultOptions: {\n\t\t\tqueries: { retry: 1, refetchOnWindowFocus: false },\n\t\t},\n\t});\n\n/**\n * `<DocumentPicker />` — search for and attach WordPress document attachments\n * (PDFs, Word, Excel, PowerPoint by default) to a block. Combines a fast\n * REST-search popover/inline list with WordPress's native Media Library modal\n * for browsing and uploading.\n *\n * The component is **controlled** when `value` is defined and **uncontrolled**\n * (with optional `defaultValue`) otherwise. In both modes `onChange` fires\n * with the full next array.\n *\n * @example\n * <DocumentPicker\n * label=\"Downloadable documents\"\n * value={attributes.documents}\n * onChange={(items) => setAttributes({ documents: items })}\n * />\n */\nexport const DocumentPicker = ({\n\tlabel,\n\thideLabelFromVision = false,\n\thelp,\n\tvariant = 'popover',\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tmaxItems = Infinity,\n\torderable,\n\tplaceholder,\n\tallowedMimeTypes,\n\tallowedExtensions,\n\tperPage,\n\tinputDelayMs = 250,\n\tfetchOnOpen = false,\n\tuniqueItems = true,\n\tenableMediaLibrary = true,\n\tshowExtensionBadge = true,\n\tshowFileSize = true,\n\tshowModifiedDate = false,\n\tfilter,\n\trequest,\n\trenderSuggestion,\n\trenderSelected,\n\tlabels = DEFAULT_LABELS,\n\tclassName,\n\tid,\n}: DocumentPickerProps) => {\n\tconst reactId = useId();\n\tconst rootId = id ?? `valu-dp-${reactId.replace(/:/g, '')}`;\n\n\tconst [uncontrolled, setUncontrolled] = useState<DocumentItem[]>(defaultValue ?? []);\n\tconst isControlled = controlledValue !== undefined;\n\tconst value = isControlled ? controlledValue : uncontrolled;\n\n\tconst handleChange = useCallback(\n\t\t(next: DocumentItem[]) => {\n\t\t\tif (!isControlled) setUncontrolled(next);\n\t\t\tonChange?.(next);\n\t\t},\n\t\t[isControlled, onChange],\n\t);\n\n\tconst effectiveMime = allowedMimeTypes ?? DEFAULT_MIME;\n\tconst effectivePerPage = perPage ?? (variant === 'popover' ? 10 : 20);\n\tconst effectiveOrderable =\n\t\torderable ?? (Number.isFinite(maxItems) ? maxItems > 1 : true);\n\n\tconst queryClientRef = useRef<QueryClient | null>(null);\n\tif (!queryClientRef.current) queryClientRef.current = makeQueryClient();\n\n\tconst isSingleSelect = maxItems === 1;\n\tconst isFull = Number.isFinite(maxItems) && value.length >= maxItems;\n\t// In single-select mode we hide the search input once a document is picked\n\t// (matches ContentPicker). The selected row carries a Replace button.\n\tconst hideInputForSingleSelect = isSingleSelect && value.length > 0;\n\tconst showInput = !isFull && !hideInputForSingleSelect;\n\n\tconst variantProps = useMemo(\n\t\t() => ({\n\t\t\trootId,\n\t\t\tlabel,\n\t\t\thideLabelFromVision,\n\t\t\t...(help !== undefined ? { help } : {}),\n\t\t\t...(placeholder !== undefined ? { placeholder } : {}),\n\t\t\tallowedMimeTypes: effectiveMime,\n\t\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\t\tperPage: effectivePerPage,\n\t\t\tinputDelayMs,\n\t\t\tuniqueItems,\n\t\t\tmaxItems,\n\t\t\tfetchOnOpen,\n\t\t\tenableMediaLibrary,\n\t\t\tshowExtensionBadge,\n\t\t\tshowFileSize,\n\t\t\tshowModifiedDate,\n\t\t\t...(filter !== undefined ? { filter } : {}),\n\t\t\t...(request !== undefined ? { request } : {}),\n\t\t\t...(renderSuggestion ? { renderSuggestion } : {}),\n\t\t\tvalue,\n\t\t\tonChange: handleChange,\n\t\t\tlabels,\n\t\t}),\n\t\t[\n\t\t\trootId,\n\t\t\tlabel,\n\t\t\thideLabelFromVision,\n\t\t\thelp,\n\t\t\tplaceholder,\n\t\t\teffectiveMime,\n\t\t\tallowedExtensions,\n\t\t\teffectivePerPage,\n\t\t\tinputDelayMs,\n\t\t\tuniqueItems,\n\t\t\tmaxItems,\n\t\t\tfetchOnOpen,\n\t\t\tenableMediaLibrary,\n\t\t\tshowExtensionBadge,\n\t\t\tshowFileSize,\n\t\t\tshowModifiedDate,\n\t\t\tfilter,\n\t\t\trequest,\n\t\t\trenderSuggestion,\n\t\t\tvalue,\n\t\t\thandleChange,\n\t\t\tlabels,\n\t\t],\n\t);\n\n\treturn (\n\t\t<EmotionCacheProvider>\n\t\t\t<QueryClientProvider client={queryClientRef.current}>\n\t\t\t\t<Root id={rootId} {...(className !== undefined ? { className } : {})}>\n\t\t\t\t\t{showInput ? (\n\t\t\t\t\t\tvariant === 'popover' ? (\n\t\t\t\t\t\t\t<DocumentPickerPopover {...variantProps} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DocumentPickerInline {...variantProps} />\n\t\t\t\t\t\t)\n\t\t\t\t\t) : null}\n\t\t\t\t\t{/*\n\t\t\t\t\t * Single-select: show a compact \"Replace\" affordance via the\n\t\t\t\t\t * MediaLibrary modal once a document is attached.\n\t\t\t\t\t */}\n\t\t\t\t\t{hideInputForSingleSelect && enableMediaLibrary ? (\n\t\t\t\t\t\t<ActionsRow>\n\t\t\t\t\t\t\t<MediaLibraryButton\n\t\t\t\t\t\t\t\tallowedMimeTypes={effectiveMime}\n\t\t\t\t\t\t\t\t{...(allowedExtensions !== undefined ? { allowedExtensions } : {})}\n\t\t\t\t\t\t\t\tmultiple={false}\n\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\tonSelect={(items) => handleChange([items[items.length - 1]!])}\n\t\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\tlabel={labels.replace}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ActionsRow>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<SelectedList\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\torderable={effectiveOrderable && value.length > 1}\n\t\t\t\t\t\tmaxItems={maxItems}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t{...(renderSelected ? { renderSelected } : {})}\n\t\t\t\t\t\tshowHeader={value.length > 0}\n\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t/>\n\t\t\t\t</Root>\n\t\t\t</QueryClientProvider>\n\t\t</EmotionCacheProvider>\n\t);\n};\n","import { FileMeta } from '../styles';\nimport { formatFileSize } from '../utils';\n\nexport interface FileSizeProps {\n\tbytes: number | undefined;\n}\n\nexport const FileSize = ({ bytes }: FileSizeProps) => {\n\tconst formatted = formatFileSize(bytes);\n\tif (!formatted) return null;\n\treturn <FileMeta>{formatted}</FileMeta>;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../components/content-picker/styles/tokens.ts","../../../components/content-picker/styles/index.ts","../../../components/document-picker/styles/index.ts","../../../components/document-picker/utils.ts","../../../components/document-picker/SearchCombobox.tsx","../../../components/document-picker/badges/ExtensionBadge.tsx","../../../components/document-picker/SuggestionItem.tsx","../../../components/document-picker/SuggestionList.tsx","../../../components/document-picker/MediaLibraryButton.tsx","../../../components/document-picker/api/fetchDocuments.ts","../../../components/document-picker/hooks/useDocumentSearch.ts","../../../components/content-picker/hooks/useDebouncedValue.ts","../../../components/content-picker/hooks/useLiveRegion.ts","../../../components/content-picker/hooks/useKeyboardNav.ts","../../../components/document-picker/hooks/useDocumentPickerController.ts","../../../components/content-picker/styles/emotionCache.tsx","../../../components/document-picker/DocumentPickerPopover.tsx","../../../components/document-picker/DocumentPickerInline.tsx","../../../components/document-picker/SelectedItem.tsx","../../../components/content-picker/DragChip.tsx","../../../components/document-picker/hooks/useResolvedDocuments.ts","../../../components/document-picker/SelectedList.tsx","../../../components/document-picker/DocumentPicker.tsx","../../../components/document-picker/badges/FileSize.tsx"],"names":["css","styled","SelectedRow","Option","Root","uuidv4","decodeEntities","__","forwardRef","VisuallyHidden","jsx","jsxs","Icon","search","closeSmall","Fragment","useRef","useEffect","useCallback","Spinner","Button","RawMediaUpload","upload","addQueryArgs","apiFetch","useInfiniteQuery","keepPreviousData","useState","speak","useMemo","sprintf","_n","next","createCache","CacheProvider","Popover","useSortable","CSS","dragHandle","caution","TextControl","chevronUp","chevronDown","useSelect","coreStore","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","defaultDropAnimation","QueryClient","useId","QueryClientProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Design tokens — CSS custom-property passthroughs with fallbacks.\n *\n * The picker is designed to render inside the WP admin where these\n * variables are defined by core (Gutenberg/@wordpress/components). When\n * rendered outside WP (tests, Storybook), the fallbacks keep it usable.\n *\n * Variable mapping:\n * - `accent` — primary action / focus ring / highlighted option edge\n * - `accentHover` — translucent accent for hover rows (matches core's\n * 4% color-mix recipe used on tertiary buttons)\n * - `accentActive` — translucent accent for active/highlighted rows\n * (matches core's 8% color-mix recipe, e.g.\n * `.components-button.is-tertiary:active`)\n * - `gray300` — input / popover borders\n * - `gray600` — secondary text (URL, meta)\n * - `gray900` — primary text\n * - `danger*` — trash / missing states\n */\nexport const tokens = {\n\taccent: 'var(--wp-admin-theme-color, #3858e9)',\n\taccentHover:\n\t\t'color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 4%, transparent)',\n\taccentActive:\n\t\t'color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 8%, transparent)',\n\tbg: 'var(--wp-components-color-background, #ffffff)',\n\tfg: 'var(--wp-components-color-foreground, #1e1e1e)',\n\tgray100: 'var(--wp-components-color-gray-100, #f0f0f0)',\n\tgray200: 'var(--wp-components-color-gray-200, #ebebeb)',\n\tgray300: 'var(--wp-components-color-gray-300, #dcdcde)',\n\tgray600: 'var(--wp-components-color-gray-600, #757575)',\n\tgray900: 'var(--wp-components-color-gray-900, #1e1e1e)',\n\tdanger: '#cc1818',\n\tdangerSoft: '#fef7f7',\n\tdangerLine: '#f0b7b7',\n\tsuccess: '#007017',\n\twarning: '#bd8600',\n\n\tradiusSm: '2px',\n\tradiusMd: '4px',\n\tradiusLg: '6px',\n\n\trowMinHeight: '40px',\n\tsuggestionMinHeight: '44px',\n\tthumbXs: '20px',\n\tthumbSm: '24px',\n\tthumbMd: '32px',\n\tthumbLg: '40px',\n\n\tshadowPopover: '0 6px 24px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.06)',\n\tshadowRow: '0 1px 0 rgba(0, 0, 0, 0.04)',\n\n\tspaceXs: '4px',\n\tspaceSm: '8px',\n\tspaceMd: '12px',\n\tspaceLg: '16px',\n\n\ttransitionFast: '120ms ease-out',\n\ttransitionMed: '200ms ease-out',\n\n\tfontSizeBody: '13px',\n\tfontSizeSmall: '11px',\n\tfontWeightRegular: 400,\n\tfontWeightMedium: 500,\n\tfontWeightBold: 600,\n} as const;\n\nexport type Tokens = typeof tokens;\n","import styled from '@emotion/styled';\nimport { css } from '@emotion/react';\n\nimport { tokens as t } from './tokens';\n\nexport const focusRing = css`\n\toutline: 2px solid ${t.accent};\n\toutline-offset: 1px;\n`;\n\nexport const visuallyHiddenCss = css`\n\tposition: absolute !important;\n\tclip: rect(1px, 1px, 1px, 1px);\n\twidth: 1px;\n\theight: 1px;\n\toverflow: hidden;\n\twhite-space: nowrap;\n`;\n\nexport const Root = styled.div`\n\tcolor: ${t.fg};\n\tfont-size: ${t.fontSizeBody};\n\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n`;\n\nexport const Label = styled.label`\n\tdisplay: block;\n\tmargin-bottom: ${t.spaceXs};\n\tfont-weight: ${t.fontWeightMedium};\n\tfont-size: ${t.fontSizeSmall};\n\ttext-transform: uppercase;\n\tletter-spacing: 0.02em;\n\tcolor: ${t.gray900};\n`;\n\nexport const HelpText = styled.p`\n\tmargin: ${t.spaceXs} 0 0;\n\tcolor: ${t.gray600};\n\tfont-size: ${t.fontSizeSmall};\n`;\n\nexport const InputShell = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tbackground: ${t.bg};\n\tborder: 1px solid ${t.gray300};\n\tborder-radius: ${t.radiusMd};\n\tpadding: 6px ${t.spaceMd};\n\tmin-height: 40px;\n\ttransition: border-color ${t.transitionFast}, box-shadow ${t.transitionFast};\n\n\t&:focus-within {\n\t\tborder-color: ${t.accent};\n\t\tbox-shadow: 0 0 0 1px ${t.accent};\n\t}\n`;\n\nexport const Input = styled.input`\n\tflex: 1;\n\tbackground: transparent;\n\tfont: inherit;\n\tcolor: ${t.fg};\n\tmin-width: 0;\n\n\t/*\n\t * WP admin's global input styles (\\`input[type=\"text\"]\\` in various\n\t * editor/sidebar stylesheets) set their own border + box-shadow at a\n\t * higher specificity than our Emotion class. \\`!important\\` is the\n\t * pragmatic reset here — we provide the focus chrome on the enclosing\n\t * \\`InputShell\\`, so every input-level border/outline/box-shadow\n\t * contribution is noise.\n\t */\n\t&,\n\t&:focus,\n\t&:focus-visible,\n\t&:hover {\n\t\tborder: 0 !important;\n\t\toutline: 0 !important;\n\t\tbox-shadow: none !important;\n\t}\n\n\t&::placeholder {\n\t\tcolor: ${t.gray600};\n\t}\n`;\n\nexport const SuggestionsShell = styled.div<{ inline?: boolean }>`\n\tbackground: ${t.bg};\n\tborder: 1px solid ${t.gray300};\n\tborder-radius: ${t.radiusMd};\n\toverflow: hidden;\n\tmax-height: 380px;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t${({ inline }) =>\n\t\tinline\n\t\t\t? css`\n\t\t\t\t\tmargin-top: ${t.spaceSm};\n\t\t\t\t`\n\t\t\t: css`\n\t\t\t\t\tbox-shadow: ${t.shadowPopover};\n\t\t\t\t`}\n`;\n\nexport const ListboxScroll = styled.div`\n\toverflow-y: auto;\n\tflex: 1;\n\tmin-height: 0;\n`;\n\nexport const StickyHeader = styled.div`\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 2;\n\tbackground: ${t.bg};\n`;\n\nexport const Listbox = styled.ul`\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: ${t.spaceXs} 0;\n`;\n\nexport const GroupHeading = styled.div`\n\tpadding: 4px ${t.spaceMd};\n\tfont-size: 10px !important;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.08em;\n\ttext-transform: uppercase !important;\n\tcolor: ${t.gray600};\n\tbackground: ${t.gray100};\n\tline-height: 1.8;\n\n\t[role='group']:not(:first-child) > & {\n\t\tborder-top: 1px solid ${t.gray200};\n\t}\n`;\n\nexport const PrimaryText = styled.span<{ muted?: boolean }>`\n\tfont-size: ${t.fontSizeBody};\n\tfont-weight: ${t.fontWeightMedium};\n\tcolor: ${({ muted }) => (muted ? t.gray600 : t.gray900)};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tdisplay: block;\n\tline-height: 1.3;\n\ttransition: color ${t.transitionFast};\n`;\n\nexport const Option = styled.li<{ highlighted?: boolean; disabled?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 4px ${t.spaceMd};\n\tcursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n\topacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n\tmin-height: ${t.suggestionMinHeight};\n\tbackground: ${({ highlighted }) => (highlighted ? t.accentActive : 'transparent')};\n\tposition: relative;\n\ttransition: background ${t.transitionFast};\n\n\t&:hover {\n\t\tbackground: ${({ highlighted, disabled }) =>\n\t\t\tdisabled ? 'transparent' : highlighted ? t.accentActive : t.accentHover};\n\t}\n\n\t/*\n\t * Target the title via a stable data attribute rather than Emotion's\n\t * generated class — the popover body has its own Emotion cache, so\n\t * class-name interpolation isn't guaranteed to match across caches.\n\t */\n\t&:hover [data-valu-title] {\n\t\tcolor: ${t.accent};\n\t}\n\n\t${({ highlighted }) =>\n\t\thighlighted &&\n\t\tcss`\n\t\t\t[data-valu-title] {\n\t\t\t\tcolor: ${t.accent};\n\t\t\t}\n\t\t\t&::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0;\n\t\t\t\ttop: 4px;\n\t\t\t\tbottom: 4px;\n\t\t\t\twidth: 2px;\n\t\t\t\tborder-radius: 0 ${t.radiusSm} ${t.radiusSm} 0;\n\t\t\t\tbackground: ${t.accent};\n\t\t\t}\n\t\t`}\n`;\n\nexport const Thumb = styled.div<{\n\tsize?: 'xs' | 'sm' | 'md' | 'lg';\n\tmissing?: boolean;\n\thasImage?: boolean;\n\tavatar?: boolean;\n}>`\n\tflex: 0 0 auto;\n\twidth: ${({ size, hasImage, avatar }) =>\n\t\tavatar\n\t\t\t? '22px'\n\t\t\t: hasImage\n\t\t\t\t? t.thumbMd\n\t\t\t\t: size === 'md'\n\t\t\t\t\t? t.thumbMd\n\t\t\t\t\t: size === 'lg'\n\t\t\t\t\t\t? t.thumbLg\n\t\t\t\t\t\t: size === 'sm'\n\t\t\t\t\t\t\t? t.thumbSm\n\t\t\t\t\t\t\t: '22px'};\n\theight: ${({ size, hasImage, avatar }) =>\n\t\tavatar\n\t\t\t? '22px'\n\t\t\t: hasImage\n\t\t\t\t? t.thumbMd\n\t\t\t\t: size === 'md'\n\t\t\t\t\t? t.thumbMd\n\t\t\t\t\t: size === 'lg'\n\t\t\t\t\t\t? t.thumbLg\n\t\t\t\t\t\t: size === 'sm'\n\t\t\t\t\t\t\t? t.thumbSm\n\t\t\t\t\t\t\t: '22px'};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcolor: ${({ missing }) => (missing ? t.danger : t.gray600)};\n\n\t${({ hasImage, avatar }) =>\n\t\tavatar\n\t\t\t? css`\n\t\t\t\t\tborder-radius: 999px;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t`\n\t\t\t: hasImage\n\t\t\t\t? css`\n\t\t\t\t\t\tborder: 1px solid ${t.gray200};\n\t\t\t\t\t\tborder-radius: ${t.radiusSm};\n\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\tbackground: ${t.gray100};\n\t\t\t\t\t`\n\t\t\t\t: undefined}\n\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-fit: cover;\n\t\tdisplay: block;\n\t}\n\n\tsvg {\n\t\twidth: 22px;\n\t\theight: 22px;\n\t}\n`;\n\nexport const ItemBody = styled.div`\n\tflex: 1;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0;\n`;\n\nexport const SecondaryText = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tdisplay: block;\n\tline-height: 1.3;\n`;\n\nexport const BadgeRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceXs};\n\tflex-wrap: wrap;\n\tmargin-top: 0;\n`;\n\nexport const TypeHint = styled.span`\n\tflex: 0 0 auto;\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\tmargin-left: ${t.spaceSm};\n\twhite-space: nowrap;\n`;\n\nexport const ActionColumn = styled.div`\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceXs};\n\tmargin-left: auto;\n`;\n\nexport const SelectedListEl = styled.ul`\n\tlist-style: none;\n\tmargin: ${t.spaceSm} 0 0;\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px;\n`;\n\nexport const SelectedRow = styled.li<{ dragging?: boolean; missing?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 2px ${t.spaceSm};\n\tbackground: ${({ missing }) => (missing ? t.dangerSoft : t.bg)};\n\tborder: 1px solid ${({ missing }) => (missing ? t.dangerLine : t.gray300)};\n\tborder-radius: ${t.radiusMd};\n\tmin-height: ${t.rowMinHeight};\n\tbox-shadow: ${({ dragging }) => (dragging ? t.shadowPopover : 'none')};\n\ttransition: box-shadow ${t.transitionFast}, border-color ${t.transitionFast};\n\n\t&:hover {\n\t\tborder-color: ${({ missing }) => (missing ? t.dangerLine : t.gray600)};\n\t}\n`;\n\nexport const DragHandleButton = styled.button`\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 20px;\n\theight: 20px;\n\tborder: 0;\n\tbackground: transparent;\n\tcolor: ${t.gray600};\n\tcursor: grab;\n\tborder-radius: ${t.radiusSm};\n\tpadding: 0;\n\n\t&:hover {\n\t\tbackground: ${t.gray100};\n\t\tcolor: ${t.gray900};\n\t}\n\n\t&:focus-visible {\n\t\t${focusRing}\n\t}\n\n\t&:active {\n\t\tcursor: grabbing;\n\t}\n\n\t&[disabled] {\n\t\tcursor: not-allowed;\n\t\topacity: 0.4;\n\t}\n\n\tsvg {\n\t\twidth: 14px;\n\t\theight: 14px;\n\t}\n`;\n\nexport const EmptyState = styled.div`\n\tpadding: ${t.spaceLg} ${t.spaceMd};\n\ttext-align: center;\n\tcolor: ${t.gray600};\n\tfont-size: ${t.fontSizeBody};\n`;\n\nexport const LoadingState = styled.div`\n\tpadding: ${t.spaceLg} ${t.spaceMd};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: ${t.spaceSm};\n\tcolor: ${t.gray600};\n\tfont-size: ${t.fontSizeBody};\n`;\n\nexport const ErrorState = styled.div`\n\tpadding: ${t.spaceMd};\n\tbackground: ${t.dangerSoft};\n\tcolor: ${t.danger};\n\tborder: 1px solid ${t.dangerLine};\n\tborder-radius: ${t.radiusMd};\n\tfont-size: ${t.fontSizeBody};\n`;\n\nexport const MaxedOutBanner = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: ${t.spaceSm} ${t.spaceMd};\n\tbackground: ${t.gray100};\n\tcolor: ${t.gray900};\n\tborder: 1px dashed ${t.gray300};\n\tborder-radius: ${t.radiusMd};\n\tfont-size: ${t.fontSizeSmall};\n`;\n\nexport const CountPill = styled.span`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tpadding: 2px 8px;\n\tbackground: ${t.gray100};\n\tcolor: ${t.gray900};\n\tborder-radius: 999px;\n\tfont-size: 10px;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.04em;\n`;\n\nexport const ChipWrap = styled.div`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tbackground: ${t.gray900};\n\tcolor: #fff;\n\tborder-radius: ${t.radiusMd};\n\tpadding: 6px ${t.spaceMd};\n\tmax-width: 280px;\n\tbox-shadow: ${t.shadowPopover};\n`;\n\nexport const ChipTitle = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tfont-weight: ${t.fontWeightMedium};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n`;\n\nexport const LoadMoreRow = styled.li`\n\tlist-style: none;\n\tdisplay: flex;\n\tjustify-content: center;\n\tpadding: ${t.spaceSm};\n`;\n\nexport const SearchIconWrap = styled.span`\n\tflex: 0 0 auto;\n\tdisplay: flex;\n\talign-items: center;\n\tcolor: ${t.gray600};\n`;\n\nexport const HeaderRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: ${t.spaceSm};\n\tmargin-top: ${t.spaceSm};\n\tmargin-bottom: ${t.spaceXs};\n`;\n\nexport const HeaderTitle = styled.h3`\n\tmargin: 0;\n\tfont-size: 10px !important;\n\ttext-transform: uppercase !important;\n\tletter-spacing: 0.04em;\n\tfont-weight: ${t.fontWeightBold};\n\tcolor: ${t.gray600};\n\tline-height: 1.8;\n`;\n","import styled from '@emotion/styled';\nimport { css } from '@emotion/react';\n\nimport { tokens as t } from '../../content-picker/styles/tokens';\n\nexport { tokens } from '../../content-picker/styles/tokens';\n\n// Reuse the generic primitives from content-picker so visual language stays\n// in sync. Anything specific to the document picker is defined below.\nexport {\n\tActionColumn,\n\tChipTitle,\n\tChipWrap,\n\tCountPill,\n\tDragHandleButton,\n\tEmptyState,\n\tErrorState,\n\tHeaderRow,\n\tHeaderTitle,\n\tInput,\n\tInputShell,\n\tItemBody,\n\tListbox,\n\tListboxScroll,\n\tLoadMoreRow,\n\tLoadingState,\n\tMaxedOutBanner,\n\tPrimaryText,\n\tSearchIconWrap,\n\tSecondaryText,\n\tSelectedListEl,\n\tStickyHeader,\n\tSuggestionsShell,\n} from '../../content-picker/styles';\n\n// `SelectedRow` is forked from content-picker so we can attach a container\n// query: rows reflow inline (title + filename + meta on one line) when the\n// row is wide enough, and stack (title above filename, meta hidden) when\n// rendered in a narrow context like the inspector sidebar.\nexport const SelectedRow = styled.li<{ dragging?: boolean; missing?: boolean }>`\n\tcontainer-type: inline-size;\n\tcontainer-name: valu-dp-row;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 2px ${t.spaceSm};\n\tbackground: ${({ missing }) => (missing ? t.dangerSoft : t.bg)};\n\tborder: 1px solid ${({ missing }) => (missing ? t.dangerLine : t.gray300)};\n\tborder-radius: ${t.radiusMd};\n\tmin-height: ${t.rowMinHeight};\n\tbox-shadow: ${({ dragging }) => (dragging ? t.shadowPopover : 'none')};\n\ttransition: box-shadow ${t.transitionFast}, border-color ${t.transitionFast};\n\n\t&:hover {\n\t\tborder-color: ${({ missing }) => (missing ? t.dangerLine : t.gray600)};\n\t}\n`;\n\n// Wide-row breakpoint. Below this width, rows fall back to the stacked\n// narrow layout (title above filename, meta hidden).\nconst WIDE_ROW = '380px';\n\n// `Option` (suggestion row) is forked from content-picker so it also acts\n// as a container for the same `valu-dp-row` query — suggestion rows and\n// selected rows share one responsive layout.\nexport const Option = styled.li<{ highlighted?: boolean; disabled?: boolean }>`\n\tcontainer-type: inline-size;\n\tcontainer-name: valu-dp-row;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tpadding: 4px ${t.spaceMd};\n\tcursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n\topacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n\tmin-height: ${t.suggestionMinHeight};\n\tbackground: ${({ highlighted }) => (highlighted ? t.accentActive : 'transparent')};\n\tposition: relative;\n\ttransition: background ${t.transitionFast};\n\n\t&:hover {\n\t\tbackground: ${({ highlighted, disabled }) =>\n\t\t\tdisabled ? 'transparent' : highlighted ? t.accentActive : t.accentHover};\n\t}\n\n\t&:hover [data-valu-title] {\n\t\tcolor: ${t.accent};\n\t}\n\n\t${({ highlighted }) =>\n\t\thighlighted &&\n\t\tcss`\n\t\t\t[data-valu-title] {\n\t\t\t\tcolor: ${t.accent};\n\t\t\t}\n\t\t\t&::before {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 0;\n\t\t\t\ttop: 4px;\n\t\t\t\tbottom: 4px;\n\t\t\t\twidth: 2px;\n\t\t\t\tborder-radius: 0 ${t.radiusSm} ${t.radiusSm} 0;\n\t\t\t\tbackground: ${t.accent};\n\t\t\t}\n\t\t`}\n`;\n\n/** Body of a selected row — stacks narrow, lays out inline when wide. */\nexport const DocRowBody = styled.div`\n\tflex: 1;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0;\n\n\t@container valu-dp-row (min-width: ${WIDE_ROW}) {\n\t\tflex-direction: row;\n\t\talign-items: baseline;\n\t\tgap: ${t.spaceMd};\n\t}\n`;\n\n/**\n * Filename text — block element under the title when narrow,\n * inline next to it when wide.\n */\nexport const FilenameText = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tdisplay: block;\n\tline-height: 1.3;\n\tmin-width: 0;\n\n\t@container valu-dp-row (min-width: ${WIDE_ROW}) {\n\t\tflex: 1;\n\t}\n`;\n\n/**\n * Inline meta (size, date) — hidden in the narrow layout, visible and\n * right-aligned in the wide one.\n */\nexport const DocMetaInline = styled.div`\n\tdisplay: none;\n\n\t@container valu-dp-row (min-width: ${WIDE_ROW}) {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: ${t.spaceSm};\n\t\tflex: 0 0 auto;\n\t\tcolor: ${t.gray600};\n\t\tfont-size: ${t.fontSizeSmall};\n\t\twhite-space: nowrap;\n\t}\n`;\n\n/**\n * Move up/down buttons — redundant with the drag handle (which also supports\n * keyboard reordering), so they are hidden in narrow containers like the\n * inspector sidebar where every pixel of row width matters.\n */\nexport const ReorderButtons = styled.span`\n\tdisplay: none;\n\n\t@container valu-dp-row (min-width: 340px) {\n\t\tdisplay: inline-flex;\n\t}\n`;\n\n/**\n * Body of a selected row in label-edit mode (`enableItemLabels`): the display\n * name is edited directly in place of the title, with the filename (and meta)\n * as one muted line underneath. Always stacked — the input needs the full\n * row width in narrow containers like the inspector sidebar.\n */\nexport const LabelEditBody = styled.div`\n\tflex: 1;\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px;\n\tpadding: 4px 0;\n\n\t.components-base-control,\n\t.components-text-control__input {\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t}\n\n\t/* __nextHasNoMarginBottom is not honored by every bundled\n\t wp-components version — enforce the no-margin layout here. */\n\t.components-base-control.components-base-control {\n\t\tmargin-bottom: 0;\n\t}\n\n\t/* Doubled class beats wp-components' own input rules regardless of\n\t stylesheet order (the emotion cache may be prepended). */\n\t.components-text-control__input.components-text-control__input {\n\t\tfont-size: ${t.fontSizeBody};\n\t\theight: 28px;\n\t\tmin-height: 28px;\n\t\tpadding: 2px 8px;\n\t}\n\n\t@container valu-dp-row (min-width: ${WIDE_ROW}) {\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tgap: ${t.spaceMd};\n\n\t\t.components-base-control {\n\t\t\tflex: 0 1 340px;\n\t\t\tmin-width: 180px;\n\t\t\twidth: auto;\n\t\t}\n\t}\n`;\n\nexport const Root = styled.div`\n\tcolor: ${t.fg};\n\tfont-size: ${t.fontSizeBody};\n\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n`;\n\nexport const ActionsRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tmargin-top: ${t.spaceSm};\n`;\n\nexport const FileMeta = styled.span`\n\tfont-size: ${t.fontSizeSmall};\n\tcolor: ${t.gray600};\n\twhite-space: nowrap;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: ${t.spaceXs};\n\n\t&::before {\n\t\tcontent: '·';\n\t\topacity: 0.6;\n\t}\n\n\t&:first-of-type::before {\n\t\tcontent: '';\n\t}\n`;\n\nexport const MetaRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceSm};\n\tflex-wrap: wrap;\n\tmin-width: 0;\n\tcolor: ${t.gray600};\n`;\n\n// Extension badge — a uppercase pill in the leading slot. Tone shifts by\n// extension so a row of mixed files is scannable at a glance.\nexport const ExtensionPill = styled.span<{ tone?: 'red' | 'blue' | 'green' | 'orange' | 'gray' }>`\n\tflex: 0 0 auto;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmin-width: 38px;\n\tpadding: 2px 6px;\n\tfont-size: 10px;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n\tborder-radius: ${t.radiusSm};\n\tborder: 1px solid currentColor;\n\tline-height: 1.4;\n\twhite-space: nowrap;\n\n\t${({ tone = 'gray' }) => {\n\t\tswitch (tone) {\n\t\t\tcase 'red':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #c0392b;\n\t\t\t\t\tbackground: #fdecea;\n\t\t\t\t`;\n\t\t\tcase 'blue':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #1a4fb8;\n\t\t\t\t\tbackground: #e8efff;\n\t\t\t\t`;\n\t\t\tcase 'green':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #1f6b3a;\n\t\t\t\t\tbackground: #e6f4ea;\n\t\t\t\t`;\n\t\t\tcase 'orange':\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: #b15a06;\n\t\t\t\t\tbackground: #fff1de;\n\t\t\t\t`;\n\t\t\tdefault:\n\t\t\t\treturn css`\n\t\t\t\t\tcolor: ${t.gray900};\n\t\t\t\t\tbackground: ${t.gray100};\n\t\t\t\t`;\n\t\t}\n\t}}\n`;\n","import { v4 as uuidv4 } from 'uuid';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __ } from '@wordpress/i18n';\n\nimport type { DocumentItem } from './types';\n\nexport const generateKey = (): string => uuidv4();\n\n/** Stable ARIA id helper: `${rootId}-${suffix}`. */\nexport const aria = (rootId: string, suffix: string): string => `${rootId}-${suffix}`;\n\nexport const isMaxedOut = (value: DocumentItem[], maxItems: number): boolean =>\n\tNumber.isFinite(maxItems) && value.length >= maxItems;\n\n/**\n * Default MIME types treated as \"documents\": PDF, Word, Excel, PowerPoint\n * (both legacy and Office Open XML variants).\n */\nexport const DEFAULT_DOCUMENT_MIME_TYPES: readonly string[] = [\n\t'application/pdf',\n\t'application/msword',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t'application/vnd.ms-excel',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t'application/vnd.ms-powerpoint',\n\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n] as const;\n\nconst decodeRendered = (raw: unknown): string => {\n\tif (typeof raw === 'string') return decodeEntities(raw);\n\tif (raw && typeof raw === 'object' && 'rendered' in raw) {\n\t\tconst rendered = (raw as { rendered?: unknown }).rendered;\n\t\tif (typeof rendered === 'string') return decodeEntities(rendered);\n\t}\n\treturn '';\n};\n\n/** Extract the basename from a URL/path. Strips query and hash. */\nexport const basenameFromUrl = (url: string | undefined | null): string => {\n\tif (!url) return '';\n\tconst cleaned = url.split('#')[0]!.split('?')[0]!;\n\tconst segments = cleaned.split('/');\n\treturn segments[segments.length - 1] ?? '';\n};\n\n/** Uppercase extension from a URL or filename. `''` if none. */\nexport const extensionFromUrl = (url: string | undefined | null): string => {\n\tconst base = basenameFromUrl(url);\n\tconst dot = base.lastIndexOf('.');\n\tif (dot <= 0 || dot === base.length - 1) return '';\n\treturn base.slice(dot + 1).toUpperCase();\n};\n\n/**\n * Human-readable file size. Mirrors the `wp_format_bytes()` style used in\n * WP admin (1 KB = 1024 B). Returns an empty string when the input is\n * undefined or non-positive.\n */\nexport const formatFileSize = (bytes: number | undefined): string => {\n\tif (!bytes || bytes <= 0 || !Number.isFinite(bytes)) return '';\n\tconst units = ['B', 'KB', 'MB', 'GB', 'TB'];\n\tlet value = bytes;\n\tlet unit = 0;\n\twhile (value >= 1024 && unit < units.length - 1) {\n\t\tvalue /= 1024;\n\t\tunit += 1;\n\t}\n\tconst fixed = value >= 100 || unit === 0 ? value.toFixed(0) : value.toFixed(1);\n\treturn `${fixed} ${units[unit]}`;\n};\n\n/** Format an ISO date string as a locale date (no time). */\nexport const formatModified = (iso: string | undefined): string => {\n\tif (!iso) return '';\n\tconst date = new Date(iso);\n\tif (Number.isNaN(date.getTime())) return '';\n\ttry {\n\t\treturn new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(date);\n\t} catch {\n\t\treturn date.toISOString().slice(0, 10);\n\t}\n};\n\ninterface MediaRecordShape {\n\tid: number;\n\ttitle?: { rendered?: string } | string;\n\tsource_url?: string;\n\turl?: string; // some endpoints/plugins expose `url` instead of `source_url`\n\tmime_type?: string;\n\tmime?: string; // legacy field on attachment objects from wp.media\n\tmedia_details?: {\n\t\tfilesize?: number;\n\t\toriginal_image?: string;\n\t};\n\tmodified?: string;\n\tmodified_gmt?: string;\n\tdate?: string;\n\tfilename?: string;\n\tlink?: string;\n}\n\n/**\n * Normalize a record from `/wp/v2/media` (or from `MediaUpload.onSelect`)\n * into a `DocumentItem`. Tolerant of both shapes — `source_url`/`url`,\n * `mime_type`/`mime`, etc.\n */\nexport const mapMediaToDocumentItem = (raw: MediaRecordShape): DocumentItem => {\n\tconst url = raw.source_url ?? raw.url ?? raw.link ?? '';\n\tconst filename = raw.filename || basenameFromUrl(url);\n\tconst title = decodeRendered(raw.title) || filename;\n\tconst mimeType = raw.mime_type ?? raw.mime ?? '';\n\tconst extension = extensionFromUrl(url) || extensionFromUrl(filename);\n\tconst fileSize = raw.media_details?.filesize;\n\tconst modified = raw.modified ?? raw.modified_gmt ?? raw.date;\n\n\treturn {\n\t\tkey: generateKey(),\n\t\tid: raw.id,\n\t\ttitle,\n\t\tfilename,\n\t\turl,\n\t\tmimeType,\n\t\textension,\n\t\tfileSize,\n\t\tmodified,\n\t\traw,\n\t};\n};\n\n/** Effective display name for an item: user-authored label, else title. */\nexport const displayTitle = (item: Pick<DocumentItem, 'label' | 'title'>): string =>\n\titem.label?.trim() || item.title;\n\n/** Filter out items already present in `value` by attachment id. */\nexport const dedupeAgainst = (\n\titems: DocumentItem[],\n\tvalue: DocumentItem[],\n\tenabled: boolean,\n): DocumentItem[] => {\n\tif (!enabled || value.length === 0) return items;\n\tconst ids = new Set(value.map((v) => v.id));\n\treturn items.filter((i) => !ids.has(i.id));\n};\n\n/**\n * Filter items so that either the MIME type matches one of `allowedMimeTypes`\n * OR the extension matches one of `allowedExtensions` (case-insensitive).\n * If both lists are empty, every item passes.\n */\nexport const matchesAllowed = (\n\titem: { mimeType: string; extension: string },\n\tallowedMimeTypes: string[] | undefined,\n\tallowedExtensions: string[] | undefined,\n): boolean => {\n\tconst hasMime = allowedMimeTypes && allowedMimeTypes.length > 0;\n\tconst hasExt = allowedExtensions && allowedExtensions.length > 0;\n\tif (!hasMime && !hasExt) return true;\n\tif (hasMime && allowedMimeTypes!.includes(item.mimeType)) return true;\n\tif (hasExt) {\n\t\tconst upper = item.extension.toUpperCase();\n\t\tif (allowedExtensions!.some((e) => e.replace(/^\\./, '').toUpperCase() === upper)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/** Label used by the SR-only \"extension badge\" prefix. */\nexport const extensionA11yLabel = (extension: string): string =>\n\textension\n\t\t? __('File type', 'valu-block-components') + ': ' + extension\n\t\t: __('Unknown file type', 'valu-block-components');\n","import { forwardRef, type ChangeEvent, type KeyboardEvent } from 'react';\nimport { Icon, VisuallyHidden } from '@wordpress/components';\nimport { search, closeSmall } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { Input, InputShell, SearchIconWrap } from './styles';\nimport { aria } from './utils';\nimport type { DocumentPickerLabels } from './types';\n\nexport interface SearchComboboxProps {\n\trootId: string;\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tonFocus?: () => void;\n\tonBlur?: () => void;\n\tonKeyDown: (event: KeyboardEvent) => void;\n\tplaceholder?: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tdisabled?: boolean;\n\topen: boolean;\n\tlistboxId: string;\n\tactiveOptionId?: string;\n\tlabels: DocumentPickerLabels;\n}\n\nexport const SearchCombobox = forwardRef<HTMLInputElement, SearchComboboxProps>(\n\t(\n\t\t{\n\t\t\trootId,\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tonKeyDown,\n\t\t\tplaceholder,\n\t\t\tlabel,\n\t\t\thideLabelFromVision,\n\t\t\thelp,\n\t\t\tdisabled,\n\t\t\topen,\n\t\t\tlistboxId,\n\t\t\tactiveOptionId,\n\t\t\tlabels,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst inputId = aria(rootId, 'input');\n\t\tconst helpId = help ? aria(rootId, 'help') : undefined;\n\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t{hideLabelFromVision ? (\n\t\t\t\t\t<VisuallyHidden as=\"label\" htmlFor={inputId}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t) : (\n\t\t\t\t\t<label htmlFor={inputId} style={{ display: 'block', marginBottom: 4 }}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t\t<InputShell aria-disabled={disabled || undefined}>\n\t\t\t\t\t<SearchIconWrap aria-hidden=\"true\">\n\t\t\t\t\t\t<Icon icon={search} size={20} />\n\t\t\t\t\t</SearchIconWrap>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\taria-controls={listboxId}\n\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\taria-activedescendant={activeOptionId}\n\t\t\t\t\t\taria-describedby={helpId}\n\t\t\t\t\t\taria-label={hideLabelFromVision ? label : undefined}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\tplaceholder ?? labels.input ?? __('Search documents', 'valu-block-components')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\tspellCheck={false}\n\t\t\t\t\t\tonChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n\t\t\t\t\t\tonFocus={onFocus}\n\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t/>\n\t\t\t\t\t{value.length > 0 && !disabled ? (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onChange('')}\n\t\t\t\t\t\t\taria-label={__('Clear search', 'valu-block-components')}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\tbackground: 'transparent',\n\t\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\t\tpadding: 2,\n\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\tcolor: 'currentColor',\n\t\t\t\t\t\t\t\topacity: 0.6,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={closeSmall} size={18} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : null}\n\t\t\t\t</InputShell>\n\t\t\t\t{help ? (\n\t\t\t\t\t<p id={helpId} style={{ margin: '4px 0 0', fontSize: 11, opacity: 0.7 }}>\n\t\t\t\t\t\t{help}\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nSearchCombobox.displayName = 'SearchCombobox';\n","import { VisuallyHidden } from '@wordpress/components';\n\nimport { ExtensionPill } from '../styles';\nimport { extensionA11yLabel } from '../utils';\n\nconst toneFor = (extension: string): 'red' | 'blue' | 'green' | 'orange' | 'gray' => {\n\tconst ext = extension.toUpperCase();\n\tif (ext === 'PDF') return 'red';\n\tif (ext === 'DOC' || ext === 'DOCX' || ext === 'RTF' || ext === 'ODT') return 'blue';\n\tif (ext === 'XLS' || ext === 'XLSX' || ext === 'CSV' || ext === 'ODS') return 'green';\n\tif (ext === 'PPT' || ext === 'PPTX' || ext === 'ODP') return 'orange';\n\treturn 'gray';\n};\n\nexport interface ExtensionBadgeProps {\n\textension: string;\n\t/** Override of the visible label (defaults to the uppercase extension). */\n\tlabel?: string;\n}\n\nexport const ExtensionBadge = ({ extension, label }: ExtensionBadgeProps) => {\n\tconst visible = label ?? (extension || '?');\n\treturn (\n\t\t<>\n\t\t\t<ExtensionPill tone={toneFor(extension)} aria-hidden=\"true\">\n\t\t\t\t{visible}\n\t\t\t</ExtensionPill>\n\t\t\t<VisuallyHidden>{extensionA11yLabel(extension)}</VisuallyHidden>\n\t\t</>\n\t);\n};\n","import { useCallback, useEffect, useRef, type MouseEvent, type ReactNode } from 'react';\n\nimport {\n\tDocMetaInline,\n\tDocRowBody,\n\tFilenameText,\n\tOption,\n\tPrimaryText,\n} from './styles';\nimport { ExtensionBadge } from './badges/ExtensionBadge';\nimport { formatFileSize, formatModified } from './utils';\nimport type { DocumentItem, SuggestionRenderState } from './types';\n\nexport interface SuggestionItemProps {\n\titem: DocumentItem;\n\toptionId: string;\n\thighlighted: boolean;\n\tselected: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tonHover: () => void;\n\tonSelect: () => void;\n\trender?: (item: DocumentItem, state: SuggestionRenderState) => ReactNode;\n}\n\nexport const SuggestionItem = ({\n\titem,\n\toptionId,\n\thighlighted,\n\tselected,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n\tonHover,\n\tonSelect,\n\trender,\n}: SuggestionItemProps) => {\n\tconst ref = useRef<HTMLLIElement | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!highlighted || !ref.current) return;\n\t\tref.current.scrollIntoView({ block: 'nearest' });\n\t}, [highlighted]);\n\n\tconst handleClick = useCallback(\n\t\t(event: MouseEvent) => {\n\t\t\tevent.preventDefault();\n\t\t\tonSelect();\n\t\t},\n\t\t[onSelect],\n\t);\n\n\tconst handleMouseDown = useCallback((event: MouseEvent) => {\n\t\tevent.preventDefault();\n\t}, []);\n\n\tif (render) {\n\t\treturn (\n\t\t\t<Option\n\t\t\t\tref={ref}\n\t\t\t\trole=\"option\"\n\t\t\t\tid={optionId}\n\t\t\t\taria-selected={selected}\n\t\t\t\thighlighted={highlighted}\n\t\t\t\tonMouseEnter={onHover}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonClick={handleClick}\n\t\t\t>\n\t\t\t\t{render(item, { highlighted, selected })}\n\t\t\t</Option>\n\t\t);\n\t}\n\n\tconst modified = showModifiedDate ? formatModified(item.modified) : '';\n\tconst hasMeta = Boolean((showFileSize && item.fileSize) || modified);\n\n\treturn (\n\t\t<Option\n\t\t\tref={ref}\n\t\t\trole=\"option\"\n\t\t\tid={optionId}\n\t\t\taria-selected={selected}\n\t\t\thighlighted={highlighted}\n\t\t\tonMouseEnter={onHover}\n\t\t\tonMouseDown={handleMouseDown}\n\t\t\tonClick={handleClick}\n\t\t>\n\t\t\t{showExtensionBadge ? <ExtensionBadge extension={item.extension} /> : null}\n\t\t\t<DocRowBody>\n\t\t\t\t<PrimaryText data-valu-title title={item.title}>\n\t\t\t\t\t{item.title}\n\t\t\t\t</PrimaryText>\n\t\t\t\t<FilenameText title={item.filename}>{item.filename}</FilenameText>\n\t\t\t</DocRowBody>\n\t\t\t{hasMeta ? (\n\t\t\t\t<DocMetaInline>\n\t\t\t\t\t{showFileSize && item.fileSize ? (\n\t\t\t\t\t\t<span>{formatFileSize(item.fileSize)}</span>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{modified ? <span>{modified}</span> : null}\n\t\t\t\t</DocMetaInline>\n\t\t\t) : null}\n\t\t</Option>\n\t);\n};\n","import { useEffect, useRef, type ReactNode } from 'react';\nimport { Button, Spinner } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nimport { SuggestionItem } from './SuggestionItem';\nimport {\n\tEmptyState,\n\tErrorState,\n\tListbox,\n\tListboxScroll,\n\tLoadMoreRow,\n\tLoadingState,\n\tStickyHeader,\n} from './styles';\nimport { aria } from './utils';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tSuggestionRenderState,\n} from './types';\n\nexport interface SuggestionListProps {\n\tlistboxId: string;\n\trootId: string;\n\tsuggestions: DocumentItem[];\n\tloading: boolean;\n\tfetchingMore: boolean;\n\thasMore: boolean;\n\terror: unknown;\n\tquery: string;\n\thighlightedIndex: number;\n\tselectedKeys: Set<string>;\n\tlabels: DocumentPickerLabels;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\theaderSlot?: ReactNode;\n\trenderSuggestion?: (item: DocumentItem, state: SuggestionRenderState) => ReactNode;\n\tonHover: (index: number) => void;\n\tonSelect: (item: DocumentItem) => void;\n\tonLoadMore: () => void;\n}\n\nexport const SuggestionList = ({\n\tlistboxId,\n\trootId,\n\tsuggestions,\n\tloading,\n\tfetchingMore,\n\thasMore,\n\terror,\n\tquery,\n\thighlightedIndex,\n\tselectedKeys,\n\tlabels,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n\theaderSlot,\n\trenderSuggestion,\n\tonHover,\n\tonSelect,\n\tonLoadMore,\n}: SuggestionListProps) => {\n\tconst scrollRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!hasMore || !sentinelRef.current || !scrollRef.current) return;\n\t\tconst io = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tfor (const e of entries) {\n\t\t\t\t\tif (e.isIntersecting) onLoadMore();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ root: scrollRef.current, rootMargin: '120px' },\n\t\t);\n\t\tio.observe(sentinelRef.current);\n\t\treturn () => io.disconnect();\n\t}, [hasMore, onLoadMore]);\n\n\tconst header = headerSlot ? <StickyHeader>{headerSlot}</StickyHeader> : null;\n\n\tif (error) {\n\t\treturn (\n\t\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t\t{header}\n\t\t\t\t<ErrorState role=\"alert\">\n\t\t\t\t\t{labels.empty ??\n\t\t\t\t\t\t__('Search failed. Please try again.', 'valu-block-components')}\n\t\t\t\t</ErrorState>\n\t\t\t</ListboxScroll>\n\t\t);\n\t}\n\n\tif (loading && suggestions.length === 0) {\n\t\treturn (\n\t\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t\t{header}\n\t\t\t\t<LoadingState>\n\t\t\t\t\t<Spinner />\n\t\t\t\t\t{labels.loading ?? __('Searching…', 'valu-block-components')}\n\t\t\t\t</LoadingState>\n\t\t\t</ListboxScroll>\n\t\t);\n\t}\n\n\tif (suggestions.length === 0) {\n\t\tconst emptyMessage =\n\t\t\tquery.trim().length > 0\n\t\t\t\t? (labels.noDocumentsFound ??\n\t\t\t\t\t__('No documents match this search.', 'valu-block-components'))\n\t\t\t\t: __('Type to search documents.', 'valu-block-components');\n\t\treturn (\n\t\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t\t{header}\n\t\t\t\t<EmptyState>{emptyMessage}</EmptyState>\n\t\t\t</ListboxScroll>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ListboxScroll ref={scrollRef}>\n\t\t\t{header}\n\t\t\t<Listbox\n\t\t\t\trole=\"listbox\"\n\t\t\t\tid={listboxId}\n\t\t\t\taria-label={labels.input ?? __('Document suggestions', 'valu-block-components')}\n\t\t\t>\n\t\t\t\t{suggestions.map((item, index) => {\n\t\t\t\t\tconst optionId = aria(rootId, `option-${index}`);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SuggestionItem\n\t\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\toptionId={optionId}\n\t\t\t\t\t\t\thighlighted={index === highlightedIndex}\n\t\t\t\t\t\t\tselected={selectedKeys.has(item.key)}\n\t\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t\t\tonHover={() => onHover(index)}\n\t\t\t\t\t\t\tonSelect={() => onSelect(item)}\n\t\t\t\t\t\t\t{...(renderSuggestion ? { render: renderSuggestion } : {})}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{hasMore ? (\n\t\t\t\t\t<LoadMoreRow>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tonClick={onLoadMore}\n\t\t\t\t\t\t\tdisabled={fetchingMore}\n\t\t\t\t\t\t\tisBusy={fetchingMore}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{fetchingMore\n\t\t\t\t\t\t\t\t? __('Loading…', 'valu-block-components')\n\t\t\t\t\t\t\t\t: __('Load more', 'valu-block-components')}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</LoadMoreRow>\n\t\t\t\t) : null}\n\t\t\t\t<div ref={sentinelRef} aria-hidden=\"true\" />\n\t\t\t</Listbox>\n\t\t</ListboxScroll>\n\t);\n};\n","import type { ComponentType, ReactNode } from 'react';\nimport { Button } from '@wordpress/components';\nimport { MediaUpload as RawMediaUpload } from '@wordpress/media-utils';\nimport { upload } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { mapMediaToDocumentItem, matchesAllowed } from './utils';\nimport type { DocumentItem, DocumentPickerLabels } from './types';\n\ninterface RawMedia {\n\tid: number;\n\t[key: string]: unknown;\n}\n\ninterface MediaUploadProps {\n\tallowedTypes?: string[];\n\tmultiple?: boolean;\n\tgallery?: boolean;\n\tvalue?: number | number[];\n\tonSelect: (value: RawMedia | RawMedia[]) => void;\n\trender: (props: { open: () => void }) => ReactNode;\n}\n\n// The class exported by @wordpress/media-utils doesn't ship a typed props\n// interface. Cast it once here and use the typed alias everywhere.\nconst MediaUpload = RawMediaUpload as unknown as ComponentType<MediaUploadProps>;\n\nexport interface MediaLibraryButtonProps {\n\tallowedMimeTypes: string[];\n\tallowedExtensions?: string[];\n\tmultiple: boolean;\n\tvalue: DocumentItem[];\n\tonSelect: (items: DocumentItem[]) => void;\n\tlabels: DocumentPickerLabels;\n\tdisabled?: boolean;\n\tvariant?: 'primary' | 'secondary' | 'tertiary';\n\tlabel?: string;\n}\n\nconst normalize = (\n\traw: RawMedia | RawMedia[],\n\tallowedMimeTypes: string[],\n\tallowedExtensions: string[] | undefined,\n): DocumentItem[] => {\n\tconst list = Array.isArray(raw) ? raw : [raw];\n\treturn list\n\t\t.map((r) => mapMediaToDocumentItem(r as Parameters<typeof mapMediaToDocumentItem>[0]))\n\t\t.filter((item) => matchesAllowed(item, allowedMimeTypes, allowedExtensions));\n};\n\nexport const MediaLibraryButton = ({\n\tallowedMimeTypes,\n\tallowedExtensions,\n\tmultiple,\n\tvalue,\n\tonSelect,\n\tlabels,\n\tdisabled,\n\tvariant = 'secondary',\n\tlabel,\n}: MediaLibraryButtonProps) => {\n\tconst selectedIds = multiple ? value.map((v) => v.id) : value[0]?.id;\n\tconst buttonLabel =\n\t\tlabel ?? labels.browseMediaLibrary ?? __('Browse Media Library', 'valu-block-components');\n\n\treturn (\n\t\t<MediaUpload\n\t\t\tallowedTypes={allowedMimeTypes}\n\t\t\tmultiple={multiple}\n\t\t\tgallery={false}\n\t\t\t{...(selectedIds !== undefined ? { value: selectedIds } : {})}\n\t\t\tonSelect={(selection) => {\n\t\t\t\tconst items = normalize(selection, allowedMimeTypes, allowedExtensions);\n\t\t\t\tif (items.length > 0) onSelect(items);\n\t\t\t}}\n\t\t\trender={({ open }) => (\n\t\t\t\t<Button variant={variant} icon={upload} onClick={open} disabled={disabled}>\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t/>\n\t);\n};\n","import apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\n\nimport type { DocumentItem, RequestContext } from '../types';\nimport { mapMediaToDocumentItem, matchesAllowed } from '../utils';\n\nexport interface FetchDocumentsArgs {\n\tquery: string;\n\tpage: number;\n\tperPage: number;\n\tmimeTypes: string[];\n\tallowedExtensions?: string[];\n\trequest?: (path: string, ctx: RequestContext) => string;\n\tsignal?: AbortSignal;\n}\n\nexport interface FetchDocumentsPage {\n\titems: DocumentItem[];\n\tpage: number;\n\thasMore: boolean;\n\ttotal: number;\n}\n\nconst buildPath = (args: FetchDocumentsArgs): string => {\n\tconst params: Record<string, string | number> = {\n\t\tper_page: args.perPage,\n\t\tpage: args.page,\n\t\t_fields: [\n\t\t\t'id',\n\t\t\t'title',\n\t\t\t'source_url',\n\t\t\t'mime_type',\n\t\t\t'media_details',\n\t\t\t'modified',\n\t\t\t'date',\n\t\t].join(','),\n\t\torder: 'desc',\n\t};\n\t// `search` and `orderby=relevance` only make sense together — WP rejects\n\t// `orderby=relevance` when `search` is empty.\n\tconst trimmed = args.query.trim();\n\tif (trimmed.length > 0) {\n\t\tparams.search = trimmed;\n\t\tparams.orderby = 'relevance';\n\t} else {\n\t\tparams.orderby = 'date';\n\t}\n\t// `/wp/v2/media` types `mime_type` as a string (CSV), not an array. Joining\n\t// avoids `rest_invalid_param` 400s from passing `mime_type[]=…`.\n\tif (args.mimeTypes.length > 0) {\n\t\tparams.mime_type = args.mimeTypes.join(',');\n\t}\n\treturn addQueryArgs('/wp/v2/media', params);\n};\n\nconst parseHeader = (response: Response, key: string): number => {\n\tconst raw = response.headers.get(key);\n\tif (!raw) return 0;\n\tconst parsed = parseInt(raw, 10);\n\treturn Number.isNaN(parsed) ? 0 : parsed;\n};\n\nexport const fetchDocuments = async (\n\targs: FetchDocumentsArgs,\n): Promise<FetchDocumentsPage> => {\n\tconst rawPath = buildPath(args);\n\tconst path = args.request\n\t\t? args.request(rawPath, { query: args.query, page: args.page })\n\t\t: rawPath;\n\n\tconst response = (await apiFetch({\n\t\tpath,\n\t\tparse: false,\n\t\tsignal: args.signal,\n\t} as Parameters<typeof apiFetch>[0])) as Response;\n\n\tconst data = (await response.json()) as unknown[];\n\tconst totalPages = parseHeader(response, 'x-wp-totalpages') || 1;\n\tconst total = parseHeader(response, 'x-wp-total');\n\n\tconst items = (data as Parameters<typeof mapMediaToDocumentItem>[0][])\n\t\t.map(mapMediaToDocumentItem)\n\t\t.filter((item) => matchesAllowed(item, args.mimeTypes, args.allowedExtensions));\n\n\treturn {\n\t\titems,\n\t\tpage: args.page,\n\t\thasMore: args.page < totalPages,\n\t\ttotal,\n\t};\n};\n","import { useInfiniteQuery, keepPreviousData } from '@tanstack/react-query';\n\nimport { fetchDocuments } from '../api/fetchDocuments';\nimport type { RequestContext } from '../types';\n\nexport interface UseDocumentSearchArgs {\n\tquery: string;\n\tmimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tenabled?: boolean;\n\trequest?: (path: string, ctx: RequestContext) => string;\n}\n\nexport const documentSearchKey = (args: UseDocumentSearchArgs) =>\n\t[\n\t\t'valu/document-search',\n\t\t[...args.mimeTypes].sort().join(','),\n\t\t[...(args.allowedExtensions ?? [])].sort().join(','),\n\t\targs.query,\n\t\targs.perPage,\n\t] as const;\n\nexport const useDocumentSearch = (args: UseDocumentSearchArgs) =>\n\tuseInfiniteQuery({\n\t\tqueryKey: documentSearchKey(args),\n\t\tqueryFn: ({ pageParam, signal }) =>\n\t\t\tfetchDocuments({\n\t\t\t\tquery: args.query,\n\t\t\t\tpage: pageParam,\n\t\t\t\tperPage: args.perPage,\n\t\t\t\tmimeTypes: args.mimeTypes,\n\t\t\t\t...(args.allowedExtensions !== undefined\n\t\t\t\t\t? { allowedExtensions: args.allowedExtensions }\n\t\t\t\t\t: {}),\n\t\t\t\t...(args.request !== undefined ? { request: args.request } : {}),\n\t\t\t\tsignal,\n\t\t\t}),\n\t\tinitialPageParam: 1,\n\t\tgetNextPageParam: (last) => (last.hasMore ? last.page + 1 : undefined),\n\t\tenabled: args.enabled ?? true,\n\t\tstaleTime: 30_000,\n\t\tplaceholderData: keepPreviousData,\n\t});\n","import { useEffect, useState } from 'react';\n\nexport const useDebouncedValue = <T,>(value: T, delay: number): T => {\n\tconst [debounced, setDebounced] = useState(value);\n\tuseEffect(() => {\n\t\tconst id = setTimeout(() => setDebounced(value), delay);\n\t\treturn () => clearTimeout(id);\n\t}, [value, delay]);\n\treturn debounced;\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Debounced screen-reader announcements. Prevents spam while a user is\n * typing quickly (each keystroke would otherwise trigger a new \"N results\").\n */\nexport const useLiveRegion = (debounceMs = 500) => {\n\tconst timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (timer.current) clearTimeout(timer.current);\n\t\t},\n\t\t[],\n\t);\n\n\tconst announce = useCallback(\n\t\t(message: string, assertiveness: 'polite' | 'assertive' = 'polite') => {\n\t\t\tif (!message) return;\n\t\t\tif (timer.current) clearTimeout(timer.current);\n\t\t\ttimer.current = setTimeout(() => speak(message, assertiveness), debounceMs);\n\t\t},\n\t\t[debounceMs],\n\t);\n\n\tconst announceImmediate = useCallback(\n\t\t(message: string, assertiveness: 'polite' | 'assertive' = 'polite') => {\n\t\t\tif (!message) return;\n\t\t\tif (timer.current) clearTimeout(timer.current);\n\t\t\tspeak(message, assertiveness);\n\t\t},\n\t\t[],\n\t);\n\n\treturn { announce, announceImmediate };\n};\n","import { useCallback, useState, type KeyboardEvent } from 'react';\n\nexport interface KeyboardNavApi {\n\thighlightedIndex: number;\n\tsetHighlightedIndex: (i: number) => void;\n\treset: () => void;\n\thandleKeyDown: (event: KeyboardEvent) => void;\n}\n\nexport interface UseKeyboardNavArgs {\n\titemCount: number;\n\tonSelect?: (index: number) => void;\n\tonEscape?: () => void;\n\t/** When true, up/down keys wrap at boundaries. */\n\twrap?: boolean;\n}\n\n/**\n * Shared keyboard-navigation state machine for suggestion lists.\n *\n * Arrow Down / Up — move highlight (with optional wrap)\n * Home / End — jump to first / last\n * Enter — onSelect(highlightedIndex) if >= 0\n * Escape — onEscape()\n */\nexport const useKeyboardNav = ({\n\titemCount,\n\tonSelect,\n\tonEscape,\n\twrap = true,\n}: UseKeyboardNavArgs): KeyboardNavApi => {\n\tconst [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n\tconst reset = useCallback(() => setHighlightedIndex(-1), []);\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\tif (itemCount === 0) {\n\t\t\t\tif (event.key === 'Escape') {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonEscape?.();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowDown': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex((i) => {\n\t\t\t\t\t\tconst next = i + 1;\n\t\t\t\t\t\tif (next >= itemCount) return wrap ? 0 : itemCount - 1;\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'ArrowUp': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex((i) => {\n\t\t\t\t\t\tif (i <= 0) return wrap ? itemCount - 1 : 0;\n\t\t\t\t\t\treturn i - 1;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'Home': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex(0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'End': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetHighlightedIndex(itemCount - 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'Enter': {\n\t\t\t\t\tif (highlightedIndex >= 0 && highlightedIndex < itemCount) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonSelect?.(highlightedIndex);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'Escape': {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonEscape?.();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t[itemCount, highlightedIndex, onSelect, onEscape, wrap],\n\t);\n\n\treturn { highlightedIndex, setHighlightedIndex, reset, handleKeyDown };\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { __, _n, sprintf } from '@wordpress/i18n';\n\nimport { useDocumentSearch } from './useDocumentSearch';\nimport { useDebouncedValue } from '../../content-picker/hooks/useDebouncedValue';\nimport { useLiveRegion } from '../../content-picker/hooks/useLiveRegion';\nimport { useKeyboardNav } from '../../content-picker/hooks/useKeyboardNav';\nimport { dedupeAgainst, generateKey, isMaxedOut } from '../utils';\nimport type { DocumentItem, DocumentPickerProps } from '../types';\n\nexport interface DocumentPickerControllerArgs {\n\tmimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tfilter?: DocumentPickerProps['filter'];\n\trequest?: DocumentPickerProps['request'];\n\tvalue: DocumentItem[];\n\tonChange: (items: DocumentItem[]) => void;\n\t/** Whether the suggestion UI is open/visible (controls `enabled`). */\n\tactive: boolean;\n\t/** When true, ignore empty query and fetch anyway. */\n\tfetchEmpty: boolean;\n\tonSelectSideEffect?: () => void;\n\tonEscape?: () => void;\n}\n\nexport interface DocumentPickerController {\n\tquery: string;\n\tsetQuery: (value: string) => void;\n\tdebouncedQuery: string;\n\tsuggestions: DocumentItem[];\n\thighlightedIndex: number;\n\tsetHighlightedIndex: (i: number) => void;\n\thandleKeyDown: (event: React.KeyboardEvent) => void;\n\tloading: boolean;\n\terror: unknown;\n\thasMore: boolean;\n\tloadMore: () => void;\n\tfetchingMore: boolean;\n\tselect: (item: DocumentItem) => void;\n\tselectMany: (items: DocumentItem[]) => void;\n\tremove: (key: string) => void;\n\treorder: (from: number, to: number) => void;\n\treplace: (items: DocumentItem[]) => void;\n\tmaxedOut: boolean;\n\ttotal: number;\n}\n\nexport const useDocumentPickerController = (\n\targs: DocumentPickerControllerArgs,\n): DocumentPickerController => {\n\tconst {\n\t\tmimeTypes,\n\t\tallowedExtensions,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tfilter,\n\t\trequest,\n\t\tvalue,\n\t\tonChange,\n\t\tactive,\n\t\tfetchEmpty,\n\t\tonSelectSideEffect,\n\t\tonEscape,\n\t} = args;\n\n\tconst [query, setQuery] = useState('');\n\tconst debouncedQuery = useDebouncedValue(query, inputDelayMs);\n\n\tconst enabled = active && (fetchEmpty || debouncedQuery.trim().length > 0);\n\n\tconst query_ = useDocumentSearch({\n\t\tquery: debouncedQuery,\n\t\tmimeTypes,\n\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\tperPage,\n\t\tenabled,\n\t\t...(request !== undefined ? { request } : {}),\n\t});\n\n\tconst suggestions = useMemo(() => {\n\t\tif (!query_.data) return [];\n\t\tconst flat = query_.data.pages.flatMap((p) => p.items);\n\t\tlet filtered = dedupeAgainst(flat, value, uniqueItems);\n\t\tif (filter) {\n\t\t\tfiltered = filter(filtered, { query: debouncedQuery });\n\t\t}\n\t\treturn filtered;\n\t}, [query_.data, value, uniqueItems, filter, debouncedQuery]);\n\n\tconst { announce, announceImmediate } = useLiveRegion();\n\n\tuseEffect(() => {\n\t\tif (!active) return;\n\t\tif (debouncedQuery.trim().length === 0 && !fetchEmpty) return;\n\t\tif (query_.isFetching) return;\n\t\tif (query_.isError) {\n\t\t\tannounce(__('Search failed. Try again.', 'valu-block-components'));\n\t\t\treturn;\n\t\t}\n\t\tconst count = suggestions.length;\n\t\tannounce(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %d: number of search results */\n\t\t\t\t_n('%d document found', '%d documents found', count, 'valu-block-components'),\n\t\t\t\tcount,\n\t\t\t),\n\t\t);\n\t}, [\n\t\tsuggestions.length,\n\t\tquery_.isFetching,\n\t\tquery_.isError,\n\t\tactive,\n\t\tdebouncedQuery,\n\t\tfetchEmpty,\n\t\tannounce,\n\t]);\n\n\tconst maxedOut = isMaxedOut(value, maxItems);\n\n\tconst replace = useCallback((items: DocumentItem[]) => onChange(items), [onChange]);\n\n\tconst selectMany = useCallback(\n\t\t(items: DocumentItem[]) => {\n\t\t\tif (items.length === 0) return;\n\t\t\tconst limited = maxItems === 1;\n\t\t\tconst normalized = items.map((item) => ({\n\t\t\t\t...item,\n\t\t\t\tkey: item.key && item.key.length > 0 ? item.key : generateKey(),\n\t\t\t}));\n\n\t\t\tif (limited) {\n\t\t\t\tconst next = [normalized[normalized.length - 1]!];\n\t\t\t\tonChange(next);\n\t\t\t\tannounceImmediate(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: document title */\n\t\t\t\t\t\t__('Selected %s.', 'valu-block-components'),\n\t\t\t\t\t\tnext[0]!.title,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tonSelectSideEffect?.();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst existingIds = new Set(value.map((v) => v.id));\n\t\t\tconst remaining = Number.isFinite(maxItems)\n\t\t\t\t? Math.max(0, maxItems - value.length)\n\t\t\t\t: normalized.length;\n\t\t\tconst toAdd = (uniqueItems\n\t\t\t\t? normalized.filter((n) => !existingIds.has(n.id))\n\t\t\t\t: normalized\n\t\t\t).slice(0, remaining);\n\t\t\tif (toAdd.length === 0) return;\n\t\t\tconst next = [...value, ...toAdd];\n\t\t\tonChange(next);\n\t\t\tannounceImmediate(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: 1: number added, 2: total selected */\n\t\t\t\t\t_n(\n\t\t\t\t\t\t'Added %1$d document. %2$d selected.',\n\t\t\t\t\t\t'Added %1$d documents. %2$d selected.',\n\t\t\t\t\t\ttoAdd.length,\n\t\t\t\t\t\t'valu-block-components',\n\t\t\t\t\t),\n\t\t\t\t\ttoAdd.length,\n\t\t\t\t\tnext.length,\n\t\t\t\t),\n\t\t\t);\n\t\t\tonSelectSideEffect?.();\n\t\t},\n\t\t[maxItems, value, uniqueItems, onChange, announceImmediate, onSelectSideEffect],\n\t);\n\n\tconst select = useCallback(\n\t\t(item: DocumentItem) => {\n\t\t\tif (maxedOut && maxItems !== 1) return;\n\t\t\tselectMany([item]);\n\t\t},\n\t\t[maxedOut, maxItems, selectMany],\n\t);\n\n\tconst remove = useCallback(\n\t\t(key: string) => {\n\t\t\tconst target = value.find((i) => i.key === key);\n\t\t\tconst next = value.filter((i) => i.key !== key);\n\t\t\tonChange(next);\n\t\t\tif (target) {\n\t\t\t\tannounceImmediate(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: title of the removed document */\n\t\t\t\t\t\t__('Removed %s.', 'valu-block-components'),\n\t\t\t\t\t\ttarget.title,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[value, onChange, announceImmediate],\n\t);\n\n\tconst reorder = useCallback(\n\t\t(from: number, to: number) => {\n\t\t\tif (from === to || from < 0 || to < 0 || from >= value.length || to >= value.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst next = value.slice();\n\t\t\tconst [moved] = next.splice(from, 1);\n\t\t\tnext.splice(to, 0, moved!);\n\t\t\tonChange(next);\n\t\t\tannounceImmediate(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: 1: title, 2: position, 3: total */\n\t\t\t\t\t__('Moved %1$s to position %2$d of %3$d.', 'valu-block-components'),\n\t\t\t\t\tmoved!.title,\n\t\t\t\t\tto + 1,\n\t\t\t\t\tnext.length,\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[value, onChange, announceImmediate],\n\t);\n\n\tconst {\n\t\thighlightedIndex,\n\t\tsetHighlightedIndex,\n\t\treset: resetHighlight,\n\t\thandleKeyDown,\n\t} = useKeyboardNav({\n\t\titemCount: suggestions.length,\n\t\tonSelect: (i) => {\n\t\t\tconst item = suggestions[i];\n\t\t\tif (item) select(item);\n\t\t},\n\t\t...(onEscape !== undefined ? { onEscape } : {}),\n\t});\n\n\tuseEffect(() => {\n\t\tresetHighlight();\n\t}, [debouncedQuery, resetHighlight]);\n\n\treturn {\n\t\tquery,\n\t\tsetQuery,\n\t\tdebouncedQuery,\n\t\tsuggestions,\n\t\thighlightedIndex,\n\t\tsetHighlightedIndex,\n\t\thandleKeyDown,\n\t\tloading: query_.isFetching && !query_.data,\n\t\terror: query_.error,\n\t\thasMore: Boolean(query_.hasNextPage),\n\t\tloadMore: () => {\n\t\t\tif (query_.hasNextPage && !query_.isFetchingNextPage) void query_.fetchNextPage();\n\t\t},\n\t\tfetchingMore: query_.isFetchingNextPage,\n\t\tselect,\n\t\tselectMany,\n\t\tremove,\n\t\treorder,\n\t\treplace,\n\t\tmaxedOut,\n\t\ttotal: query_.data?.pages[0]?.total ?? 0,\n\t};\n};\n","import { useCallback, useMemo, useState, type ReactNode } from 'react';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\n\n/**\n * Creates an Emotion cache scoped to this component.\n *\n * Two reasons this exists:\n *\n * 1. The WordPress site editor renders blocks inside an iframe. The default\n * Emotion cache targets `document.head` of the top frame, so styles\n * never reach the iframe. We capture the owning document via a callback\n * ref and build the cache pointing at the correct `<head>`.\n * 2. A unique cache key per component prevents class-name collisions with\n * a consumer's own Emotion instance.\n */\nexport const EmotionCacheProvider = ({ children }: { children: ReactNode }) => {\n\tconst [head, setHead] = useState<HTMLElement | null>(null);\n\n\tconst captureDocument = useCallback((node: HTMLDivElement | null) => {\n\t\tif (!node) return;\n\t\tconst owner = node.ownerDocument ?? document;\n\t\tsetHead((prev) => (prev === owner.head ? prev : (owner.head as HTMLElement)));\n\t}, []);\n\n\tconst cache = useMemo(() => {\n\t\tif (!head) return null;\n\t\treturn createCache({ key: 'valu-cp', container: head, prepend: true });\n\t}, [head]);\n\n\tif (!cache) {\n\t\t// First render: emit a hidden probe so we can read ownerDocument. No\n\t\t// styled content has a chance to render yet, so nothing ends up in\n\t\t// the wrong head.\n\t\treturn <div ref={captureDocument} style={{ display: 'contents' }} />;\n\t}\n\n\treturn (\n\t\t<CacheProvider value={cache}>\n\t\t\t<div ref={captureDocument} style={{ display: 'contents' }}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</CacheProvider>\n\t);\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Popover } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nimport { SearchCombobox } from './SearchCombobox';\nimport { SuggestionList } from './SuggestionList';\nimport { MediaLibraryButton } from './MediaLibraryButton';\nimport { useDocumentPickerController } from './hooks/useDocumentPickerController';\nimport { aria } from './utils';\nimport { ActionsRow, MaxedOutBanner } from './styles';\nimport { EmotionCacheProvider } from '../content-picker/styles/emotionCache';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tDocumentPickerProps,\n} from './types';\n\nexport interface DocumentPickerPopoverProps {\n\trootId: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tplaceholder?: string;\n\tallowedMimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tfetchOnOpen: boolean;\n\tenableMediaLibrary: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tfilter?: DocumentPickerProps['filter'];\n\trequest?: DocumentPickerProps['request'];\n\trenderSuggestion?: DocumentPickerProps['renderSuggestion'];\n\tvalue: DocumentItem[];\n\tonChange: (items: DocumentItem[]) => void;\n\tlabels: DocumentPickerLabels;\n}\n\nexport const DocumentPickerPopover = (props: DocumentPickerPopoverProps) => {\n\tconst {\n\t\trootId,\n\t\tlabel,\n\t\thideLabelFromVision,\n\t\thelp,\n\t\tplaceholder,\n\t\tallowedMimeTypes,\n\t\tallowedExtensions,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tfetchOnOpen,\n\t\tenableMediaLibrary,\n\t\tshowExtensionBadge,\n\t\tshowFileSize,\n\t\tshowModifiedDate,\n\t\tfilter,\n\t\trequest,\n\t\trenderSuggestion,\n\t\tvalue,\n\t\tonChange,\n\t\tlabels,\n\t} = props;\n\n\tconst [open, setOpen] = useState(false);\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst popoverBodyRef = useRef<HTMLDivElement | null>(null);\n\tconst clearQueryRef = useRef<(() => void) | null>(null);\n\n\tconst controller = useDocumentPickerController({\n\t\tmimeTypes: allowedMimeTypes,\n\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\t...(filter !== undefined ? { filter } : {}),\n\t\t...(request !== undefined ? { request } : {}),\n\t\tvalue,\n\t\tonChange,\n\t\tactive: open,\n\t\tfetchEmpty: fetchOnOpen,\n\t\tonSelectSideEffect: () => {\n\t\t\tif (maxItems === 1) {\n\t\t\t\tsetOpen(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearQueryRef.current?.();\n\t\t\trequestAnimationFrame(() => inputRef.current?.focus());\n\t\t},\n\t\tonEscape: () => {\n\t\t\tsetOpen(false);\n\t\t\trequestAnimationFrame(() => inputRef.current?.focus());\n\t\t},\n\t});\n\n\tclearQueryRef.current = () => controller.setQuery('');\n\n\tconst listboxId = aria(rootId, 'listbox');\n\n\tconst activeOptionId =\n\t\tcontroller.highlightedIndex >= 0\n\t\t\t? aria(rootId, `option-${controller.highlightedIndex}`)\n\t\t\t: undefined;\n\n\tconst selectedKeys = useMemo(() => new Set(value.map((v) => v.key)), [value]);\n\n\tconst handleFocus = useCallback(() => {\n\t\tif (!controller.maxedOut) setOpen(true);\n\t}, [controller.maxedOut]);\n\n\tuseEffect(() => {\n\t\tif (controller.maxedOut) setOpen(false);\n\t}, [controller.maxedOut]);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\n\t\tconst handlePointerDown = (event: MouseEvent) => {\n\t\t\tconst target = event.target as Node | null;\n\t\t\tif (!target) return;\n\t\t\tconst input = inputRef.current;\n\t\t\tconst body = popoverBodyRef.current;\n\t\t\tconst anchorContainer = input?.closest('div') ?? input;\n\t\t\tif (anchorContainer && anchorContainer.contains(target)) return;\n\t\t\tif (body && body.contains(target)) return;\n\t\t\tsetOpen(false);\n\t\t};\n\n\t\tconst docs = new Set<Document>();\n\t\tif (typeof document !== 'undefined') docs.add(document);\n\t\tconst inputDoc = inputRef.current?.ownerDocument;\n\t\tif (inputDoc) docs.add(inputDoc);\n\n\t\tdocs.forEach((d) => d.addEventListener('mousedown', handlePointerDown, true));\n\t\treturn () => {\n\t\t\tdocs.forEach((d) => d.removeEventListener('mousedown', handlePointerDown, true));\n\t\t};\n\t}, [open]);\n\n\tconst disabled = controller.maxedOut;\n\n\treturn (\n\t\t<div style={{ position: 'relative' }}>\n\t\t\t<SearchCombobox\n\t\t\t\tref={inputRef}\n\t\t\t\trootId={rootId}\n\t\t\t\tvalue={controller.query}\n\t\t\t\tonChange={(next) => {\n\t\t\t\t\tcontroller.setQuery(next);\n\t\t\t\t\tif (!open && !disabled) setOpen(true);\n\t\t\t\t}}\n\t\t\t\tonFocus={handleFocus}\n\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\tif (event.key === 'ArrowDown' && !open && !disabled) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontroller.handleKeyDown(event);\n\t\t\t\t}}\n\t\t\t\t{...(placeholder !== undefined ? { placeholder } : {})}\n\t\t\t\tlabel={label}\n\t\t\t\thideLabelFromVision={hideLabelFromVision}\n\t\t\t\t{...(help !== undefined ? { help } : {})}\n\t\t\t\tdisabled={disabled}\n\t\t\t\topen={open && !disabled}\n\t\t\t\tlistboxId={listboxId}\n\t\t\t\t{...(activeOptionId !== undefined ? { activeOptionId } : {})}\n\t\t\t\tlabels={labels}\n\t\t\t/>\n\t\t\t{enableMediaLibrary ? (\n\t\t\t\t<ActionsRow>\n\t\t\t\t\t<MediaLibraryButton\n\t\t\t\t\t\tallowedMimeTypes={allowedMimeTypes}\n\t\t\t\t\t\t{...(allowedExtensions !== undefined ? { allowedExtensions } : {})}\n\t\t\t\t\t\tmultiple={maxItems !== 1}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonSelect={(items) => controller.selectMany(items)}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</ActionsRow>\n\t\t\t) : null}\n\t\t\t{disabled ? (\n\t\t\t\t<MaxedOutBanner role=\"status\" style={{ marginTop: 8 }}>\n\t\t\t\t\t{labels.limitReached ?? __('Selection limit reached.', 'valu-block-components')}\n\t\t\t\t</MaxedOutBanner>\n\t\t\t) : null}\n\t\t\t{open && !disabled && inputRef.current ? (\n\t\t\t\t<Popover\n\t\t\t\t\tanchor={inputRef.current.closest('div') ?? inputRef.current}\n\t\t\t\t\tplacement=\"bottom-start\"\n\t\t\t\t\tfocusOnMount={false}\n\t\t\t\t\tonClose={() => setOpen(false)}\n\t\t\t\t\tonFocusOutside={() => setOpen(false)}\n\t\t\t\t\tshift\n\t\t\t\t\tflip\n\t\t\t\t\tresize\n\t\t\t\t\toffset={4}\n\t\t\t\t\tclassName=\"valu-document-picker__popover\"\n\t\t\t\t>\n\t\t\t\t\t<EmotionCacheProvider>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={popoverBodyRef}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tminWidth: inputRef.current.offsetWidth,\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SuggestionList\n\t\t\t\t\t\t\t\tlistboxId={listboxId}\n\t\t\t\t\t\t\t\trootId={rootId}\n\t\t\t\t\t\t\t\tsuggestions={controller.suggestions}\n\t\t\t\t\t\t\t\tloading={controller.loading}\n\t\t\t\t\t\t\t\tfetchingMore={controller.fetchingMore}\n\t\t\t\t\t\t\t\thasMore={controller.hasMore}\n\t\t\t\t\t\t\t\terror={controller.error}\n\t\t\t\t\t\t\t\tquery={controller.debouncedQuery}\n\t\t\t\t\t\t\t\thighlightedIndex={controller.highlightedIndex}\n\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t\t\t\t{...(renderSuggestion ? { renderSuggestion } : {})}\n\t\t\t\t\t\t\t\tonHover={(i) => controller.setHighlightedIndex(i)}\n\t\t\t\t\t\t\t\tonSelect={(item) => controller.select(item)}\n\t\t\t\t\t\t\t\tonLoadMore={() => controller.loadMore()}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</EmotionCacheProvider>\n\t\t\t\t</Popover>\n\t\t\t) : null}\n\t\t</div>\n\t);\n};\n","import { useMemo, useRef } from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { SearchCombobox } from './SearchCombobox';\nimport { SuggestionList } from './SuggestionList';\nimport { MediaLibraryButton } from './MediaLibraryButton';\nimport { useDocumentPickerController } from './hooks/useDocumentPickerController';\nimport { aria } from './utils';\nimport { ActionsRow, MaxedOutBanner, SuggestionsShell } from './styles';\nimport type {\n\tDocumentItem,\n\tDocumentPickerLabels,\n\tDocumentPickerProps,\n} from './types';\n\nexport interface DocumentPickerInlineProps {\n\trootId: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tplaceholder?: string;\n\tallowedMimeTypes: string[];\n\tallowedExtensions?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tfetchOnOpen: boolean;\n\tenableMediaLibrary: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tfilter?: DocumentPickerProps['filter'];\n\trequest?: DocumentPickerProps['request'];\n\trenderSuggestion?: DocumentPickerProps['renderSuggestion'];\n\tvalue: DocumentItem[];\n\tonChange: (items: DocumentItem[]) => void;\n\tlabels: DocumentPickerLabels;\n}\n\nexport const DocumentPickerInline = (props: DocumentPickerInlineProps) => {\n\tconst {\n\t\trootId,\n\t\tlabel,\n\t\thideLabelFromVision,\n\t\thelp,\n\t\tplaceholder,\n\t\tallowedMimeTypes,\n\t\tallowedExtensions,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tfetchOnOpen,\n\t\tenableMediaLibrary,\n\t\tshowExtensionBadge,\n\t\tshowFileSize,\n\t\tshowModifiedDate,\n\t\tfilter,\n\t\trequest,\n\t\trenderSuggestion,\n\t\tvalue,\n\t\tonChange,\n\t\tlabels,\n\t} = props;\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst clearQueryRef = useRef<(() => void) | null>(null);\n\n\tconst controller = useDocumentPickerController({\n\t\tmimeTypes: allowedMimeTypes,\n\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\tperPage,\n\t\tinputDelayMs,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\t...(filter !== undefined ? { filter } : {}),\n\t\t...(request !== undefined ? { request } : {}),\n\t\tvalue,\n\t\tonChange,\n\t\tactive: true,\n\t\tfetchEmpty: fetchOnOpen || value.length === 0,\n\t\tonSelectSideEffect: () => {\n\t\t\tclearQueryRef.current?.();\n\t\t\trequestAnimationFrame(() => inputRef.current?.focus());\n\t\t},\n\t});\n\n\tclearQueryRef.current = () => controller.setQuery('');\n\n\tconst listboxId = aria(rootId, 'listbox');\n\tconst activeOptionId =\n\t\tcontroller.highlightedIndex >= 0\n\t\t\t? aria(rootId, `option-${controller.highlightedIndex}`)\n\t\t\t: undefined;\n\n\tconst selectedKeys = useMemo(() => new Set(value.map((v) => v.key)), [value]);\n\n\tconst disabled = controller.maxedOut;\n\tconst shouldShowList =\n\t\t!disabled &&\n\t\t(controller.debouncedQuery.trim().length > 0 ||\n\t\t\tfetchOnOpen ||\n\t\t\tvalue.length === 0);\n\n\treturn (\n\t\t<div>\n\t\t\t<SearchCombobox\n\t\t\t\tref={inputRef}\n\t\t\t\trootId={rootId}\n\t\t\t\tvalue={controller.query}\n\t\t\t\tonChange={(next) => controller.setQuery(next)}\n\t\t\t\tonKeyDown={controller.handleKeyDown}\n\t\t\t\t{...(placeholder !== undefined ? { placeholder } : {})}\n\t\t\t\tlabel={label}\n\t\t\t\thideLabelFromVision={hideLabelFromVision}\n\t\t\t\t{...(help !== undefined ? { help } : {})}\n\t\t\t\tdisabled={disabled}\n\t\t\t\topen={shouldShowList}\n\t\t\t\tlistboxId={listboxId}\n\t\t\t\t{...(activeOptionId !== undefined ? { activeOptionId } : {})}\n\t\t\t\tlabels={labels}\n\t\t\t/>\n\t\t\t{enableMediaLibrary ? (\n\t\t\t\t<ActionsRow>\n\t\t\t\t\t<MediaLibraryButton\n\t\t\t\t\t\tallowedMimeTypes={allowedMimeTypes}\n\t\t\t\t\t\t{...(allowedExtensions !== undefined ? { allowedExtensions } : {})}\n\t\t\t\t\t\tmultiple={maxItems !== 1}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonSelect={(items) => controller.selectMany(items)}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</ActionsRow>\n\t\t\t) : null}\n\t\t\t{disabled ? (\n\t\t\t\t<MaxedOutBanner role=\"status\" style={{ marginTop: 8 }}>\n\t\t\t\t\t{labels.limitReached ?? __('Selection limit reached.', 'valu-block-components')}\n\t\t\t\t</MaxedOutBanner>\n\t\t\t) : null}\n\t\t\t{shouldShowList ? (\n\t\t\t\t<SuggestionsShell inline style={{ marginTop: 8 }}>\n\t\t\t\t\t<SuggestionList\n\t\t\t\t\t\tlistboxId={listboxId}\n\t\t\t\t\t\trootId={rootId}\n\t\t\t\t\t\tsuggestions={controller.suggestions}\n\t\t\t\t\t\tloading={controller.loading}\n\t\t\t\t\t\tfetchingMore={controller.fetchingMore}\n\t\t\t\t\t\thasMore={controller.hasMore}\n\t\t\t\t\t\terror={controller.error}\n\t\t\t\t\t\tquery={controller.debouncedQuery}\n\t\t\t\t\t\thighlightedIndex={controller.highlightedIndex}\n\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t\t{...(renderSuggestion ? { renderSuggestion } : {})}\n\t\t\t\t\t\tonHover={(i) => controller.setHighlightedIndex(i)}\n\t\t\t\t\t\tonSelect={(item) => controller.select(item)}\n\t\t\t\t\t\tonLoadMore={() => controller.loadMore()}\n\t\t\t\t\t/>\n\t\t\t\t</SuggestionsShell>\n\t\t\t) : null}\n\t\t</div>\n\t);\n};\n","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { Button, Icon, TextControl } from '@wordpress/components';\nimport { caution, chevronDown, chevronUp, closeSmall, dragHandle } from '@wordpress/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport {\n\tActionColumn,\n\tDocMetaInline,\n\tDocRowBody,\n\tDragHandleButton,\n\tFilenameText,\n\tLabelEditBody,\n\tPrimaryText,\n\tReorderButtons,\n\tSelectedRow,\n} from './styles';\nimport { ExtensionBadge } from './badges/ExtensionBadge';\nimport { displayTitle, formatFileSize, formatModified } from './utils';\nimport type { DocumentPickerLabels, ResolvedDocumentItem } from './types';\n\nexport interface SelectedItemProps {\n\titem: ResolvedDocumentItem;\n\tindex: number;\n\ttotal: number;\n\torderable: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tlabels: DocumentPickerLabels;\n\tonRemove: () => void;\n\tonMoveUp?: () => void;\n\tonMoveDown?: () => void;\n\t/** Show the editable per-item display-name field. */\n\tenableLabelEdit?: boolean;\n\t/** Called with the next label; an empty string clears the override. */\n\tonLabelChange?: (label: string) => void;\n\trender?: (item: ResolvedDocumentItem) => ReactNode;\n}\n\nexport const SelectedItem = ({\n\titem,\n\tindex,\n\ttotal,\n\torderable,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n\tlabels,\n\tonRemove,\n\tonMoveUp,\n\tonMoveDown,\n\tenableLabelEdit = false,\n\tonLabelChange,\n\trender,\n}: SelectedItemProps) => {\n\tconst { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n\t\tid: item.key,\n\t\tdisabled: !orderable,\n\t});\n\n\tconst style: CSSProperties = {\n\t\ttransform: CSS.Translate.toString(transform),\n\t\ttransition,\n\t\topacity: isDragging ? 0 : 1,\n\t};\n\n\tconst isMissing = item.missing === 'deleted';\n\tconst missingLabel =\n\t\tlabels.missing ?? __('This document is no longer available.', 'valu-block-components');\n\n\tconst displayName = displayTitle(item);\n\n\tconst removeLabel = labels.remove\n\t\t? labels.remove\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: document title */\n\t\t\t\t__('Remove %s', 'valu-block-components'),\n\t\t\t\tdisplayName,\n\t\t\t);\n\tconst moveUpLabel = labels.moveUp\n\t\t? labels.moveUp\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: document title */\n\t\t\t\t__('Move %s up', 'valu-block-components'),\n\t\t\t\tdisplayName,\n\t\t\t);\n\tconst moveDownLabel = labels.moveDown\n\t\t? labels.moveDown\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: document title */\n\t\t\t\t__('Move %s down', 'valu-block-components'),\n\t\t\t\tdisplayName,\n\t\t\t);\n\n\tconst modified = showModifiedDate ? formatModified(item.modified) : '';\n\n\t// Label-edit mode: the display name is edited directly in place of the\n\t// title. `labelDraft` keeps the in-progress text while the field is\n\t// focused so clearing it doesn't immediately snap back to the title;\n\t// on blur the field settles on the effective display name again.\n\t// Commits are debounced so consumers persisting to block attributes\n\t// don't re-render the block on every keystroke; blur flushes.\n\tconst isLabelEdit = enableLabelEdit && !isMissing && Boolean(onLabelChange);\n\tconst [labelDraft, setLabelDraft] = useState<string | null>(null);\n\tconst commitTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (commitTimer.current) {\n\t\t\t\tclearTimeout(commitTimer.current);\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\t// An empty field — or the original title typed back — clears the override.\n\tconst normalizeLabel = (value: string): string => {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed === '' || trimmed === item.title ? '' : value;\n\t};\n\tconst itemLabelText = labels.itemLabel ?? __('Display name', 'valu-block-components');\n\tconst metaParts = [item.filename];\n\tif (showFileSize && item.fileSize) {\n\t\tmetaParts.push(formatFileSize(item.fileSize));\n\t}\n\tif (modified) {\n\t\tmetaParts.push(modified);\n\t}\n\n\treturn (\n\t\t<SelectedRow\n\t\t\tref={setNodeRef}\n\t\t\tstyle={style}\n\t\t\tdragging={isDragging}\n\t\t\tmissing={isMissing}\n\t\t\taria-setsize={total}\n\t\t\taria-posinset={index + 1}\n\t\t>\n\t\t\t{orderable ? (\n\t\t\t\t<DragHandleButton\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={labels.dragHandle ?? __('Reorder item', 'valu-block-components')}\n\t\t\t\t\t{...attributes}\n\t\t\t\t\t{...listeners}\n\t\t\t\t>\n\t\t\t\t\t<Icon icon={dragHandle} size={14} />\n\t\t\t\t</DragHandleButton>\n\t\t\t) : null}\n\t\t\t{isMissing ? (\n\t\t\t\t<Icon icon={caution} size={20} />\n\t\t\t) : showExtensionBadge ? (\n\t\t\t\t<ExtensionBadge extension={item.extension} />\n\t\t\t) : null}\n\t\t\t{render ? (\n\t\t\t\trender(item)\n\t\t\t) : isLabelEdit ? (\n\t\t\t\t<LabelEditBody>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize={false}\n\t\t\t\t\t\taria-label={sprintf(\n\t\t\t\t\t\t\t/* translators: 1: display-name field label, 2: filename */\n\t\t\t\t\t\t\t'%1$s: %2$s',\n\t\t\t\t\t\t\titemLabelText,\n\t\t\t\t\t\t\titem.filename,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tvalue={labelDraft ?? item.label ?? item.title}\n\t\t\t\t\t\tonChange={(value) => {\n\t\t\t\t\t\t\tsetLabelDraft(value);\n\t\t\t\t\t\t\tif (commitTimer.current) {\n\t\t\t\t\t\t\t\tclearTimeout(commitTimer.current);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcommitTimer.current = setTimeout(() => {\n\t\t\t\t\t\t\t\tcommitTimer.current = null;\n\t\t\t\t\t\t\t\tonLabelChange?.(normalizeLabel(value));\n\t\t\t\t\t\t\t}, 300);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonBlur={() => {\n\t\t\t\t\t\t\tif (commitTimer.current) {\n\t\t\t\t\t\t\t\tclearTimeout(commitTimer.current);\n\t\t\t\t\t\t\t\tcommitTimer.current = null;\n\t\t\t\t\t\t\t\tif (labelDraft !== null) {\n\t\t\t\t\t\t\t\t\tonLabelChange?.(normalizeLabel(labelDraft));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetLabelDraft(null);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<FilenameText title={item.filename}>{metaParts.join(' · ')}</FilenameText>\n\t\t\t\t</LabelEditBody>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<DocRowBody>\n\t\t\t\t\t\t<PrimaryText muted={isMissing} title={displayName}>\n\t\t\t\t\t\t\t{isMissing ? missingLabel : displayName}\n\t\t\t\t\t\t</PrimaryText>\n\t\t\t\t\t\t{!isMissing ? (\n\t\t\t\t\t\t\t<FilenameText title={item.filename}>{item.filename}</FilenameText>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</DocRowBody>\n\t\t\t\t\t{!isMissing && (showFileSize || modified) ? (\n\t\t\t\t\t\t<DocMetaInline>\n\t\t\t\t\t\t\t{showFileSize && item.fileSize ? (\n\t\t\t\t\t\t\t\t<span>{formatFileSize(item.fileSize)}</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{modified ? <span>{modified}</span> : null}\n\t\t\t\t\t\t</DocMetaInline>\n\t\t\t\t\t) : null}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t<ActionColumn>\n\t\t\t\t{orderable ? (\n\t\t\t\t\t<ReorderButtons>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\ticon={chevronUp}\n\t\t\t\t\t\t\tlabel={moveUpLabel}\n\t\t\t\t\t\t\tonClick={onMoveUp}\n\t\t\t\t\t\t\tdisabled={index === 0 || !onMoveUp}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\ticon={chevronDown}\n\t\t\t\t\t\t\tlabel={moveDownLabel}\n\t\t\t\t\t\t\tonClick={onMoveDown}\n\t\t\t\t\t\t\tdisabled={index === total - 1 || !onMoveDown}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ReorderButtons>\n\t\t\t\t) : null}\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\ticon={closeSmall}\n\t\t\t\t\tlabel={removeLabel}\n\t\t\t\t\tonClick={onRemove}\n\t\t\t\t\tisDestructive\n\t\t\t\t/>\n\t\t\t</ActionColumn>\n\t\t</SelectedRow>\n\t);\n};\n","import { Icon } from '@wordpress/components';\nimport { dragHandle } from '@wordpress/icons';\n\nimport { ChipTitle, ChipWrap } from './styles';\n\nexport interface DragChipProps {\n\ttitle: string;\n}\n\nexport const DragChip = ({ title }: DragChipProps) => (\n\t<ChipWrap>\n\t\t<Icon icon={dragHandle} size={16} />\n\t\t<ChipTitle>{title}</ChipTitle>\n\t</ChipWrap>\n);\n","import { useMemo } from 'react';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\nimport type { DocumentItem, ResolvedDocumentItem } from '../types';\nimport { mapMediaToDocumentItem } from '../utils';\n\n/**\n * Hydrate picked documents from core-data. If a record is missing after\n * resolution finishes, flag it with `missing: 'deleted'`. When the record\n * is found, refresh title/url/extension/size from the live record.\n */\nexport const useResolvedDocuments = (value: DocumentItem[]): ResolvedDocumentItem[] => {\n\t// Values are store references, `null` or `undefined`, never objects built\n\t// here: useSelect compares the result shallowly, so a fresh wrapper per\n\t// item would count as a change on every call.\n\t// `undefined` = still resolving, `null` = resolved but not found.\n\tconst records = useSelect(\n\t\t(select) => {\n\t\t\tconst core = select(coreStore);\n\t\t\tconst out: Record<number, unknown> = {};\n\t\t\tfor (const item of value) {\n\t\t\t\tconst record = core.getEntityRecord('postType', 'attachment', item.id);\n\t\t\t\tconst resolved = core.hasFinishedResolution('getEntityRecord', [\n\t\t\t\t\t'postType',\n\t\t\t\t\t'attachment',\n\t\t\t\t\titem.id,\n\t\t\t\t]);\n\t\t\t\tout[item.id] = resolved ? (record ?? null) : undefined;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\t[value],\n\t);\n\n\treturn useMemo(\n\t\t() =>\n\t\t\tvalue.map((item): ResolvedDocumentItem => {\n\t\t\t\tconst record = records[item.id];\n\t\t\t\tif (record === undefined) return item;\n\t\t\t\tif (!record) return { ...item, missing: 'deleted' };\n\t\t\t\tconst fresh = mapMediaToDocumentItem(\n\t\t\t\t\trecord as Parameters<typeof mapMediaToDocumentItem>[0],\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\t...item,\n\t\t\t\t\ttitle: fresh.title || item.title,\n\t\t\t\t\tfilename: fresh.filename || item.filename,\n\t\t\t\t\turl: fresh.url || item.url,\n\t\t\t\t\tmimeType: fresh.mimeType || item.mimeType,\n\t\t\t\t\textension: fresh.extension || item.extension,\n\t\t\t\t\tfileSize: fresh.fileSize ?? item.fileSize,\n\t\t\t\t\tmodified: fresh.modified ?? item.modified,\n\t\t\t\t};\n\t\t\t}),\n\t\t[value, records],\n\t);\n};\n","import { useCallback, useMemo, useState, type ReactNode } from 'react';\nimport {\n\tDndContext,\n\tDragOverlay,\n\tMouseSensor,\n\tTouchSensor,\n\tKeyboardSensor,\n\tclosestCenter,\n\tuseSensor,\n\tuseSensors,\n\tdefaultDropAnimation,\n\ttype DragEndEvent,\n\ttype DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n\tSortableContext,\n\tarrayMove,\n\tsortableKeyboardCoordinates,\n\tverticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { SelectedItem } from './SelectedItem';\nimport { DragChip } from '../content-picker/DragChip';\nimport { displayTitle } from './utils';\nimport { useResolvedDocuments } from './hooks/useResolvedDocuments';\nimport { CountPill, HeaderRow, HeaderTitle, SelectedListEl } from './styles';\nimport type { DocumentItem, DocumentPickerLabels, ResolvedDocumentItem } from './types';\n\nexport interface SelectedListProps {\n\tvalue: DocumentItem[];\n\torderable: boolean;\n\tmaxItems: number;\n\tlabels: DocumentPickerLabels;\n\tonChange: (next: DocumentItem[]) => void;\n\trenderSelected?: (item: ResolvedDocumentItem) => ReactNode;\n\tshowHeader?: boolean;\n\tshowExtensionBadge: boolean;\n\tshowFileSize: boolean;\n\tshowModifiedDate: boolean;\n\tenableItemLabels?: boolean;\n}\n\nexport const SelectedList = ({\n\tvalue,\n\torderable,\n\tmaxItems,\n\tlabels,\n\tonChange,\n\trenderSelected,\n\tshowHeader = true,\n\tshowExtensionBadge,\n\tshowFileSize,\n\tshowModifiedDate,\n\tenableItemLabels = false,\n}: SelectedListProps) => {\n\tconst resolved = useResolvedDocuments(value);\n\tconst [activeKey, setActiveKey] = useState<string | null>(null);\n\n\tconst sensors = useSensors(\n\t\tuseSensor(MouseSensor, { activationConstraint: { distance: 5 } }),\n\t\tuseSensor(TouchSensor, { activationConstraint: { delay: 200, tolerance: 6 } }),\n\t\tuseSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n\t);\n\n\tconst ids = useMemo(() => resolved.map((i) => i.key), [resolved]);\n\tconst activeItem = activeKey ? resolved.find((i) => i.key === activeKey) : null;\n\n\tconst remove = useCallback(\n\t\t(key: string) => onChange(value.filter((i) => i.key !== key)),\n\t\t[value, onChange],\n\t);\n\n\tconst setLabel = useCallback(\n\t\t(key: string, label: string) =>\n\t\t\tonChange(\n\t\t\t\tvalue.map((i) => {\n\t\t\t\t\tif (i.key !== key) {\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t\tif (label === '') {\n\t\t\t\t\t\tconst rest = { ...i };\n\t\t\t\t\t\tdelete rest.label;\n\t\t\t\t\t\treturn rest;\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...i, label };\n\t\t\t\t}),\n\t\t\t),\n\t\t[value, onChange],\n\t);\n\n\tconst reorder = useCallback(\n\t\t(from: number, to: number) => {\n\t\t\tif (from === to) return;\n\t\t\tonChange(arrayMove(value, from, to));\n\t\t},\n\t\t[value, onChange],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(event: DragStartEvent) => setActiveKey(String(event.active.id)),\n\t\t[],\n\t);\n\n\tconst handleDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tsetActiveKey(null);\n\t\t\tconst { active, over } = event;\n\t\t\tif (!over || active.id === over.id) return;\n\t\t\tconst from = ids.indexOf(String(active.id));\n\t\t\tconst to = ids.indexOf(String(over.id));\n\t\t\tif (from >= 0 && to >= 0) reorder(from, to);\n\t\t},\n\t\t[ids, reorder],\n\t);\n\n\tif (resolved.length === 0) return null;\n\n\tconst isSingleSelect = maxItems === 1;\n\tconst shouldShowHeader = showHeader && !isSingleSelect;\n\n\tconst header = shouldShowHeader ? (\n\t\t<HeaderRow>\n\t\t\t<HeaderTitle>\n\t\t\t\t{resolved.length === 1\n\t\t\t\t\t? (labels.selectedSingular ?? __('Selected', 'valu-block-components'))\n\t\t\t\t\t: (labels.selectedPlural ?? __('Selected', 'valu-block-components'))}\n\t\t\t</HeaderTitle>\n\t\t\t<CountPill aria-hidden=\"true\">\n\t\t\t\t{Number.isFinite(maxItems)\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t/* translators: 1: current count, 2: max count */\n\t\t\t\t\t\t\t'%1$d / %2$d',\n\t\t\t\t\t\t\tresolved.length,\n\t\t\t\t\t\t\tmaxItems,\n\t\t\t\t\t\t)\n\t\t\t\t\t: String(resolved.length)}\n\t\t\t</CountPill>\n\t\t</HeaderRow>\n\t) : null;\n\n\tconst rows = resolved.map((item, index) => (\n\t\t<SelectedItem\n\t\t\tkey={item.key}\n\t\t\titem={item}\n\t\t\tindex={index}\n\t\t\ttotal={resolved.length}\n\t\t\torderable={orderable}\n\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\tshowFileSize={showFileSize}\n\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\tlabels={labels}\n\t\t\tonRemove={() => remove(item.key)}\n\t\t\t{...(index > 0 ? { onMoveUp: () => reorder(index, index - 1) } : {})}\n\t\t\t{...(index < resolved.length - 1\n\t\t\t\t? { onMoveDown: () => reorder(index, index + 1) }\n\t\t\t\t: {})}\n\t\t\t{...(enableItemLabels\n\t\t\t\t? {\n\t\t\t\t\t\tenableLabelEdit: true,\n\t\t\t\t\t\tonLabelChange: (label: string) => setLabel(item.key, label),\n\t\t\t\t\t}\n\t\t\t\t: {})}\n\t\t\t{...(renderSelected ? { render: renderSelected } : {})}\n\t\t/>\n\t));\n\n\tif (!orderable) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{header}\n\t\t\t\t<SelectedListEl role=\"list\">{rows}</SelectedListEl>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{header}\n\t\t\t<DndContext\n\t\t\t\tsensors={sensors}\n\t\t\t\tcollisionDetection={closestCenter}\n\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\tonDragCancel={() => setActiveKey(null)}\n\t\t\t>\n\t\t\t\t<SortableContext items={ids} strategy={verticalListSortingStrategy}>\n\t\t\t\t\t<SelectedListEl role=\"list\">{rows}</SelectedListEl>\n\t\t\t\t</SortableContext>\n\t\t\t\t<DragOverlay dropAnimation={defaultDropAnimation}>\n\t\t\t\t\t{activeItem ? <DragChip title={displayTitle(activeItem)} /> : null}\n\t\t\t\t</DragOverlay>\n\t\t\t</DndContext>\n\t\t</>\n\t);\n};\n","import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n\nimport { DocumentPickerPopover } from './DocumentPickerPopover';\nimport { DocumentPickerInline } from './DocumentPickerInline';\nimport { SelectedList } from './SelectedList';\nimport { MediaLibraryButton } from './MediaLibraryButton';\nimport { EmotionCacheProvider } from '../content-picker/styles/emotionCache';\nimport { ActionsRow, Root } from './styles';\nimport { DEFAULT_DOCUMENT_MIME_TYPES } from './utils';\nimport type { DocumentItem, DocumentPickerLabels, DocumentPickerProps } from './types';\n\nconst DEFAULT_LABELS: DocumentPickerLabels = {};\nconst DEFAULT_MIME = [...DEFAULT_DOCUMENT_MIME_TYPES];\n\nconst makeQueryClient = () =>\n\tnew QueryClient({\n\t\tdefaultOptions: {\n\t\t\tqueries: { retry: 1, refetchOnWindowFocus: false },\n\t\t},\n\t});\n\n/**\n * `<DocumentPicker />` — search for and attach WordPress document attachments\n * (PDFs, Word, Excel, PowerPoint by default) to a block. Combines a fast\n * REST-search popover/inline list with WordPress's native Media Library modal\n * for browsing and uploading.\n *\n * The component is **controlled** when `value` is defined and **uncontrolled**\n * (with optional `defaultValue`) otherwise. In both modes `onChange` fires\n * with the full next array.\n *\n * @example\n * <DocumentPicker\n * label=\"Downloadable documents\"\n * value={attributes.documents}\n * onChange={(items) => setAttributes({ documents: items })}\n * />\n */\nexport const DocumentPicker = ({\n\tlabel,\n\thideLabelFromVision = false,\n\thelp,\n\tvariant = 'popover',\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tmaxItems = Infinity,\n\torderable,\n\tplaceholder,\n\tallowedMimeTypes,\n\tallowedExtensions,\n\tperPage,\n\tinputDelayMs = 250,\n\tfetchOnOpen = false,\n\tuniqueItems = true,\n\tenableMediaLibrary = true,\n\tenableItemLabels = false,\n\tshowExtensionBadge = true,\n\tshowFileSize = true,\n\tshowModifiedDate = false,\n\tfilter,\n\trequest,\n\trenderSuggestion,\n\trenderSelected,\n\tlabels = DEFAULT_LABELS,\n\tclassName,\n\tid,\n}: DocumentPickerProps) => {\n\tconst reactId = useId();\n\tconst rootId = id ?? `valu-dp-${reactId.replace(/:/g, '')}`;\n\n\tconst [uncontrolled, setUncontrolled] = useState<DocumentItem[]>(defaultValue ?? []);\n\tconst isControlled = controlledValue !== undefined;\n\tconst value = isControlled ? controlledValue : uncontrolled;\n\n\tconst handleChange = useCallback(\n\t\t(next: DocumentItem[]) => {\n\t\t\tif (!isControlled) setUncontrolled(next);\n\t\t\tonChange?.(next);\n\t\t},\n\t\t[isControlled, onChange],\n\t);\n\n\tconst effectiveMime = allowedMimeTypes ?? DEFAULT_MIME;\n\tconst effectivePerPage = perPage ?? (variant === 'popover' ? 10 : 20);\n\tconst effectiveOrderable = orderable ?? (Number.isFinite(maxItems) ? maxItems > 1 : true);\n\n\tconst queryClientRef = useRef<QueryClient | null>(null);\n\tif (!queryClientRef.current) queryClientRef.current = makeQueryClient();\n\n\tconst isSingleSelect = maxItems === 1;\n\tconst isFull = Number.isFinite(maxItems) && value.length >= maxItems;\n\t// In single-select mode we hide the search input once a document is picked\n\t// (matches ContentPicker). The selected row carries a Replace button.\n\tconst hideInputForSingleSelect = isSingleSelect && value.length > 0;\n\tconst showInput = !isFull && !hideInputForSingleSelect;\n\n\tconst variantProps = useMemo(\n\t\t() => ({\n\t\t\trootId,\n\t\t\tlabel,\n\t\t\thideLabelFromVision,\n\t\t\t...(help !== undefined ? { help } : {}),\n\t\t\t...(placeholder !== undefined ? { placeholder } : {}),\n\t\t\tallowedMimeTypes: effectiveMime,\n\t\t\t...(allowedExtensions !== undefined ? { allowedExtensions } : {}),\n\t\t\tperPage: effectivePerPage,\n\t\t\tinputDelayMs,\n\t\t\tuniqueItems,\n\t\t\tmaxItems,\n\t\t\tfetchOnOpen,\n\t\t\tenableMediaLibrary,\n\t\t\tshowExtensionBadge,\n\t\t\tshowFileSize,\n\t\t\tshowModifiedDate,\n\t\t\t...(filter !== undefined ? { filter } : {}),\n\t\t\t...(request !== undefined ? { request } : {}),\n\t\t\t...(renderSuggestion ? { renderSuggestion } : {}),\n\t\t\tvalue,\n\t\t\tonChange: handleChange,\n\t\t\tlabels,\n\t\t}),\n\t\t[\n\t\t\trootId,\n\t\t\tlabel,\n\t\t\thideLabelFromVision,\n\t\t\thelp,\n\t\t\tplaceholder,\n\t\t\teffectiveMime,\n\t\t\tallowedExtensions,\n\t\t\teffectivePerPage,\n\t\t\tinputDelayMs,\n\t\t\tuniqueItems,\n\t\t\tmaxItems,\n\t\t\tfetchOnOpen,\n\t\t\tenableMediaLibrary,\n\t\t\tshowExtensionBadge,\n\t\t\tshowFileSize,\n\t\t\tshowModifiedDate,\n\t\t\tfilter,\n\t\t\trequest,\n\t\t\trenderSuggestion,\n\t\t\tvalue,\n\t\t\thandleChange,\n\t\t\tlabels,\n\t\t],\n\t);\n\n\treturn (\n\t\t<EmotionCacheProvider>\n\t\t\t<QueryClientProvider client={queryClientRef.current}>\n\t\t\t\t<Root id={rootId} {...(className !== undefined ? { className } : {})}>\n\t\t\t\t\t{showInput ? (\n\t\t\t\t\t\tvariant === 'popover' ? (\n\t\t\t\t\t\t\t<DocumentPickerPopover {...variantProps} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DocumentPickerInline {...variantProps} />\n\t\t\t\t\t\t)\n\t\t\t\t\t) : null}\n\t\t\t\t\t{/*\n\t\t\t\t\t * Single-select: show a compact \"Replace\" affordance via the\n\t\t\t\t\t * MediaLibrary modal once a document is attached.\n\t\t\t\t\t */}\n\t\t\t\t\t{hideInputForSingleSelect && enableMediaLibrary ? (\n\t\t\t\t\t\t<ActionsRow>\n\t\t\t\t\t\t\t<MediaLibraryButton\n\t\t\t\t\t\t\t\tallowedMimeTypes={effectiveMime}\n\t\t\t\t\t\t\t\t{...(allowedExtensions !== undefined ? { allowedExtensions } : {})}\n\t\t\t\t\t\t\t\tmultiple={false}\n\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\tonSelect={(items) => {\n\t\t\t\t\t\t\t\t\tconst next = items[items.length - 1]!;\n\t\t\t\t\t\t\t\t\tconst prev = value[0];\n\t\t\t\t\t\t\t\t\t// Re-selecting the same attachment keeps the\n\t\t\t\t\t\t\t\t\t// user-authored label; a different file drops it.\n\t\t\t\t\t\t\t\t\tconst keepLabel =\n\t\t\t\t\t\t\t\t\t\tprev?.id === next.id && prev.label !== undefined;\n\t\t\t\t\t\t\t\t\thandleChange([\n\t\t\t\t\t\t\t\t\t\tkeepLabel ? { ...next, label: prev.label! } : next,\n\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\tlabel={labels.replace}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ActionsRow>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<SelectedList\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\torderable={effectiveOrderable && value.length > 1}\n\t\t\t\t\t\tmaxItems={maxItems}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t{...(renderSelected ? { renderSelected } : {})}\n\t\t\t\t\t\tshowHeader={value.length > 0}\n\t\t\t\t\t\tshowExtensionBadge={showExtensionBadge}\n\t\t\t\t\t\tshowFileSize={showFileSize}\n\t\t\t\t\t\tshowModifiedDate={showModifiedDate}\n\t\t\t\t\t\tenableItemLabels={enableItemLabels}\n\t\t\t\t\t/>\n\t\t\t\t</Root>\n\t\t\t</QueryClientProvider>\n\t\t</EmotionCacheProvider>\n\t);\n};\n","import { FileMeta } from '../styles';\nimport { formatFileSize } from '../utils';\n\nexport interface FileSizeProps {\n\tbytes: number | undefined;\n}\n\nexport const FileSize = ({ bytes }: FileSizeProps) => {\n\tconst formatted = formatFileSize(bytes);\n\tif (!formatted) return null;\n\treturn <FileMeta>{formatted}</FileMeta>;\n};\n"]}
|