@valu/block-components 0.2.0 → 0.3.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.
@@ -0,0 +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"]}
@@ -0,0 +1,210 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ type DocumentPickerVariant = 'popover' | 'inline';
5
+ /** Reason a picked document can't be displayed normally. */
6
+ type MissingReason = 'deleted';
7
+ /**
8
+ * A document item in the picker. `key` is a stable client-side uuid (use
9
+ * for React keys); `id` is the WordPress attachment id.
10
+ */
11
+ interface DocumentItem {
12
+ key: string;
13
+ id: number;
14
+ title: string;
15
+ filename: string;
16
+ url: string;
17
+ mimeType: string;
18
+ /** Uppercase extension, e.g. `PDF`, `DOCX`. Empty string if unknown. */
19
+ extension: string;
20
+ /** File size in bytes (from `media_details.filesize` when available). */
21
+ fileSize?: number;
22
+ /** ISO-8601 date string of the last modification, when available. */
23
+ modified?: string;
24
+ /** Raw REST record so consumer filters can reach beyond the normalized shape. */
25
+ raw?: unknown;
26
+ }
27
+ /** A picked document resolved against the current entity store. */
28
+ interface ResolvedDocumentItem extends DocumentItem {
29
+ missing?: MissingReason;
30
+ }
31
+ /** i18n bag — all optional, sensible defaults are used. */
32
+ interface DocumentPickerLabels {
33
+ input?: string;
34
+ help?: string;
35
+ empty?: string;
36
+ loading?: string;
37
+ noDocumentsFound?: string;
38
+ selectedSingular?: string;
39
+ selectedPlural?: string;
40
+ limitReached?: string;
41
+ browseMediaLibrary?: string;
42
+ replace?: string;
43
+ remove?: string;
44
+ moveUp?: string;
45
+ moveDown?: string;
46
+ dragHandle?: string;
47
+ missing?: string;
48
+ openLink?: string;
49
+ extensionBadge?: string;
50
+ }
51
+ interface RequestContext {
52
+ query: string;
53
+ page: number;
54
+ }
55
+ interface FilterContext {
56
+ query: string;
57
+ }
58
+ interface SuggestionRenderState {
59
+ highlighted: boolean;
60
+ selected: boolean;
61
+ }
62
+ interface DocumentPickerProps {
63
+ /** Accessible name. Required. */
64
+ label: string;
65
+ /** Hide the label visually but keep it for screen readers. */
66
+ hideLabelFromVision?: boolean;
67
+ /** Help text shown under the input. */
68
+ help?: string;
69
+ /** Visual variant. @default 'popover' */
70
+ variant?: DocumentPickerVariant;
71
+ /** Controlled value. Omit for uncontrolled. */
72
+ value?: DocumentItem[];
73
+ /** Uncontrolled initial value. */
74
+ defaultValue?: DocumentItem[];
75
+ /** Called with the next array whenever the selection changes. */
76
+ onChange?: (items: DocumentItem[]) => void;
77
+ /** Maximum items the user can pick. `1` = single-select. @default Infinity */
78
+ maxItems?: number;
79
+ /** Allow drag-to-reorder. @default true when maxItems > 1 */
80
+ orderable?: boolean;
81
+ /** Input placeholder text. */
82
+ placeholder?: string;
83
+ /**
84
+ * MIME types to filter REST search and forward to the Media Library modal.
85
+ * @default DEFAULT_DOCUMENT_MIME_TYPES (PDF, Word, Excel, PowerPoint)
86
+ */
87
+ allowedMimeTypes?: string[];
88
+ /**
89
+ * Additional file extensions to accept (matched case-insensitively
90
+ * against the basename). Useful for documents with non-standard MIME.
91
+ */
92
+ allowedExtensions?: string[];
93
+ /** Items per page from the REST search endpoint. @default 10 (popover) / 20 (inline) */
94
+ perPage?: number;
95
+ /** Debounce between keystrokes and the search request, in ms. @default 250 */
96
+ inputDelayMs?: number;
97
+ /** In `popover` variant, fetch suggestions immediately when the popover opens. */
98
+ fetchOnOpen?: boolean;
99
+ /** Prevent duplicate items in the selection. @default true */
100
+ uniqueItems?: boolean;
101
+ /** Show the "Browse Media Library" button. @default true */
102
+ enableMediaLibrary?: boolean;
103
+ /** Show the uppercase extension badge on each row. @default true */
104
+ showExtensionBadge?: boolean;
105
+ /** Show file size on each row. @default true */
106
+ showFileSize?: boolean;
107
+ /** Show the upload/modified date on each row. @default false */
108
+ showModifiedDate?: boolean;
109
+ /** Final filter over normalized suggestions. */
110
+ filter?: (items: DocumentItem[], ctx: FilterContext) => DocumentItem[];
111
+ /** Rewrite the REST path before it is fetched. */
112
+ request?: (path: string, ctx: RequestContext) => string;
113
+ /** Custom suggestion-row renderer. */
114
+ renderSuggestion?: (item: DocumentItem, state: SuggestionRenderState) => ReactNode;
115
+ /** Custom selected-row renderer. */
116
+ renderSelected?: (item: ResolvedDocumentItem) => ReactNode;
117
+ /** i18n overrides. */
118
+ labels?: DocumentPickerLabels;
119
+ /** Extra class on the root element. */
120
+ className?: string;
121
+ /** Explicit id for the root element; used as prefix for ARIA ids. */
122
+ id?: string;
123
+ }
124
+
125
+ /**
126
+ * `<DocumentPicker />` — search for and attach WordPress document attachments
127
+ * (PDFs, Word, Excel, PowerPoint by default) to a block. Combines a fast
128
+ * REST-search popover/inline list with WordPress's native Media Library modal
129
+ * for browsing and uploading.
130
+ *
131
+ * The component is **controlled** when `value` is defined and **uncontrolled**
132
+ * (with optional `defaultValue`) otherwise. In both modes `onChange` fires
133
+ * with the full next array.
134
+ *
135
+ * @example
136
+ * <DocumentPicker
137
+ * label="Downloadable documents"
138
+ * value={attributes.documents}
139
+ * onChange={(items) => setAttributes({ documents: items })}
140
+ * />
141
+ */
142
+ declare const DocumentPicker: ({ label, hideLabelFromVision, help, variant, value: controlledValue, defaultValue, onChange, maxItems, orderable, placeholder, allowedMimeTypes, allowedExtensions, perPage, inputDelayMs, fetchOnOpen, uniqueItems, enableMediaLibrary, showExtensionBadge, showFileSize, showModifiedDate, filter, request, renderSuggestion, renderSelected, labels, className, id, }: DocumentPickerProps) => react_jsx_runtime.JSX.Element;
143
+
144
+ interface MediaLibraryButtonProps {
145
+ allowedMimeTypes: string[];
146
+ allowedExtensions?: string[];
147
+ multiple: boolean;
148
+ value: DocumentItem[];
149
+ onSelect: (items: DocumentItem[]) => void;
150
+ labels: DocumentPickerLabels;
151
+ disabled?: boolean;
152
+ variant?: 'primary' | 'secondary' | 'tertiary';
153
+ label?: string;
154
+ }
155
+ declare const MediaLibraryButton: ({ allowedMimeTypes, allowedExtensions, multiple, value, onSelect, labels, disabled, variant, label, }: MediaLibraryButtonProps) => react_jsx_runtime.JSX.Element;
156
+
157
+ interface ExtensionBadgeProps {
158
+ extension: string;
159
+ /** Override of the visible label (defaults to the uppercase extension). */
160
+ label?: string;
161
+ }
162
+ declare const ExtensionBadge: ({ extension, label }: ExtensionBadgeProps) => react_jsx_runtime.JSX.Element;
163
+
164
+ interface FileSizeProps {
165
+ bytes: number | undefined;
166
+ }
167
+ declare const FileSize: ({ bytes }: FileSizeProps) => react_jsx_runtime.JSX.Element | null;
168
+
169
+ /**
170
+ * Default MIME types treated as "documents": PDF, Word, Excel, PowerPoint
171
+ * (both legacy and Office Open XML variants).
172
+ */
173
+ declare const DEFAULT_DOCUMENT_MIME_TYPES: readonly string[];
174
+ /** Extract the basename from a URL/path. Strips query and hash. */
175
+ declare const basenameFromUrl: (url: string | undefined | null) => string;
176
+ /** Uppercase extension from a URL or filename. `''` if none. */
177
+ declare const extensionFromUrl: (url: string | undefined | null) => string;
178
+ /**
179
+ * Human-readable file size. Mirrors the `wp_format_bytes()` style used in
180
+ * WP admin (1 KB = 1024 B). Returns an empty string when the input is
181
+ * undefined or non-positive.
182
+ */
183
+ declare const formatFileSize: (bytes: number | undefined) => string;
184
+ interface MediaRecordShape {
185
+ id: number;
186
+ title?: {
187
+ rendered?: string;
188
+ } | string;
189
+ source_url?: string;
190
+ url?: string;
191
+ mime_type?: string;
192
+ mime?: string;
193
+ media_details?: {
194
+ filesize?: number;
195
+ original_image?: string;
196
+ };
197
+ modified?: string;
198
+ modified_gmt?: string;
199
+ date?: string;
200
+ filename?: string;
201
+ link?: string;
202
+ }
203
+ /**
204
+ * Normalize a record from `/wp/v2/media` (or from `MediaUpload.onSelect`)
205
+ * into a `DocumentItem`. Tolerant of both shapes — `source_url`/`url`,
206
+ * `mime_type`/`mime`, etc.
207
+ */
208
+ declare const mapMediaToDocumentItem: (raw: MediaRecordShape) => DocumentItem;
209
+
210
+ export { DEFAULT_DOCUMENT_MIME_TYPES, type DocumentItem, DocumentPicker, type DocumentPickerLabels, type DocumentPickerProps, type DocumentPickerVariant, ExtensionBadge, FileSize, type FilterContext, MediaLibraryButton, type MissingReason, type RequestContext, type ResolvedDocumentItem, type SuggestionRenderState, basenameFromUrl, extensionFromUrl, formatFileSize, mapMediaToDocumentItem };