@valu/block-components 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -0
- package/dist/components/content-picker/index.cjs +2034 -0
- package/dist/components/content-picker/index.cjs.map +1 -0
- package/dist/components/content-picker/index.d.cts +203 -0
- package/dist/components/content-picker/index.d.ts +203 -0
- package/dist/components/content-picker/index.js +2026 -0
- package/dist/components/content-picker/index.js.map +1 -0
- package/dist/index.cjs +2034 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2026 -0
- package/dist/index.js.map +1 -0
- package/package.json +120 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../components/content-picker/styles/tokens.ts","../../../components/content-picker/styles/index.ts","../../../components/content-picker/utils.ts","../../../components/content-picker/SearchCombobox.tsx","../../../components/content-picker/badges/StatusBadge.tsx","../../../components/content-picker/SuggestionItem.tsx","../../../components/content-picker/SuggestionList.tsx","../../../components/content-picker/TypeFilter.tsx","../../../components/content-picker/api/fetchSearch.ts","../../../components/content-picker/hooks/useContentSearch.ts","../../../components/content-picker/hooks/useDebouncedValue.ts","../../../components/content-picker/hooks/useLiveRegion.ts","../../../components/content-picker/hooks/useKeyboardNav.ts","../../../components/content-picker/hooks/useContentPickerController.ts","../../../components/content-picker/styles/emotionCache.tsx","../../../components/content-picker/ContentPickerPopover.tsx","../../../components/content-picker/ContentPickerInline.tsx","../../../components/content-picker/badges/TypeBadge.tsx","../../../components/content-picker/SelectedItem.tsx","../../../components/content-picker/DragChip.tsx","../../../components/content-picker/hooks/useResolvedItems.ts","../../../components/content-picker/SelectedList.tsx","../../../components/content-picker/ContentPicker.tsx"],"names":["css","styled","uuidv4","decodeEntities","url","filterURLForDisplay","safeDecodeURI","__","people","forwardRef","VisuallyHidden","jsx","jsxs","Icon","search","closeSmall","useRef","useEffect","useCallback","Spinner","Button","addQueryArgs","apiFetch","useInfiniteQuery","keepPreviousData","useState","speak","useMemo","useSelect","select","sprintf","_n","createCache","CacheProvider","groupByType","Popover","Pill","icons","useSortable","CSS","dragHandle","caution","Fragment","chevronUp","chevronDown","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 { v4 as uuidv4 } from 'uuid';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { filterURLForDisplay, safeDecodeURI } from '@wordpress/url';\nimport { __ } from '@wordpress/i18n';\nimport { people } from '@wordpress/icons';\n\nimport type {\n\tContentItem,\n\tContentKind,\n\tContentPickerIcon,\n\tContentPickerIconMap,\n\tContentStatus,\n} from './types';\n\nexport const generateKey = (): string => uuidv4();\n\nexport const decodeTitle = (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\nexport const toDisplayUrl = (url: string | undefined | null): string => {\n\tif (!url) return '';\n\ttry {\n\t\treturn filterURLForDisplay(safeDecodeURI(url)) ?? '';\n\t} catch {\n\t\treturn url;\n\t}\n};\n\nexport const groupByType = (items: ContentItem[]): Array<[string, ContentItem[]]> => {\n\tconst map = new Map<string, ContentItem[]>();\n\tfor (const item of items) {\n\t\tconst bucket = map.get(item.type);\n\t\tif (bucket) bucket.push(item);\n\t\telse map.set(item.type, [item]);\n\t}\n\treturn Array.from(map.entries());\n};\n\nconst postTypeLabels: Record<string, string> = {\n\tpost: 'Post',\n\tpage: 'Page',\n\tattachment: 'Media',\n};\n\nexport const humanizeType = (type: string, kind: ContentKind): string => {\n\tif (kind === 'user') return __('User', 'valu-block-components');\n\tif (postTypeLabels[type]) return postTypeLabels[type];\n\treturn type\n\t\t.replace(/[-_]+/g, ' ')\n\t\t.replace(/\\b\\w/g, (c) => c.toUpperCase());\n};\n\nconst statusLabels: Partial<Record<ContentStatus, string>> = {\n\tdraft: 'Draft',\n\tpending: 'Pending',\n\tprivate: 'Private',\n\tfuture: 'Scheduled',\n\ttrash: 'Trash',\n};\n\nexport const humanizeStatus = (status: ContentStatus | undefined): string | null => {\n\tif (!status || status === 'publish') return null;\n\treturn statusLabels[status] ?? status;\n};\n\n/** Stable id for ARIA references: `${rootId}-option-${index}` etc. */\nexport const aria = (rootId: string, suffix: string): string => `${rootId}-${suffix}`;\n\nexport const isMaxedOut = (value: ContentItem[], maxItems: number): boolean =>\n\tNumber.isFinite(maxItems) && value.length >= maxItems;\n\n/** Filter out items already present in `value` by entity id. */\nexport const dedupeAgainst = <T extends { id: number }>(\n\titems: T[],\n\tvalue: ContentItem[],\n\tenabled: boolean,\n): T[] => {\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 * Default icons used when a consumer hasn't provided an override.\n * Only users get one by default — everything else renders without a\n * leading glyph unless the consumer supplies an `icons` map.\n */\nexport const DEFAULT_ITEM_ICONS: ContentPickerIconMap = {\n\tuser: people,\n};\n\n/** Pick the icon for an item: consumer override → built-in default → null. */\nexport const resolveItemIcon = (\n\titem: ContentItem,\n\tuserIcons: ContentPickerIconMap | undefined,\n): ContentPickerIcon | undefined => {\n\tif (userIcons && item.type in userIcons) return userIcons[item.type];\n\tif (item.type in DEFAULT_ITEM_ICONS) return DEFAULT_ITEM_ICONS[item.type];\n\treturn undefined;\n};\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 { ContentPickerLabels } 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: ContentPickerLabels;\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={placeholder ?? labels.input ?? __('Search', 'valu-block-components')}\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 styled from '@emotion/styled';\nimport { __ } from '@wordpress/i18n';\n\nimport { tokens as t } from '../styles/tokens';\nimport type { ContentStatus } from '../types';\nimport { humanizeStatus } from '../utils';\n\ntype Tone = 'neutral' | 'warn' | 'danger' | 'success';\n\nconst tones: Record<Tone, { bg: string; fg: string; border: string }> = {\n\tneutral: { bg: t.gray100, fg: t.gray900, border: t.gray300 },\n\twarn: { bg: '#fef3d0', fg: t.warning, border: '#f3d782' },\n\tdanger: { bg: t.dangerSoft, fg: t.danger, border: t.dangerLine },\n\tsuccess: { bg: '#e6f4ea', fg: t.success, border: '#a7d5b3' },\n};\n\nconst toneFor = (status: ContentStatus): Tone => {\n\tif (status === 'trash') return 'danger';\n\tif (status === 'draft' || status === 'pending' || status === 'future') return 'warn';\n\tif (status === 'private') return 'neutral';\n\treturn 'neutral';\n};\n\nconst Pill = styled.span<{ tone: Tone }>`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tpadding: 1px 6px;\n\tbackground: ${({ tone }) => tones[tone].bg};\n\tcolor: ${({ tone }) => tones[tone].fg};\n\tborder: 1px solid ${({ tone }) => tones[tone].border};\n\tborder-radius: 999px;\n\tfont-size: 10px;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n\twhite-space: nowrap;\n\tline-height: 1.6;\n`;\n\nexport interface StatusBadgeProps {\n\tstatus: ContentStatus;\n}\n\nexport const StatusBadge = ({ status }: StatusBadgeProps) => {\n\tconst label = humanizeStatus(status);\n\tif (!label) return null;\n\tconst translated =\n\t\tstatus === 'draft'\n\t\t\t? __('Draft', 'valu-block-components')\n\t\t\t: status === 'pending'\n\t\t\t\t? __('Pending', 'valu-block-components')\n\t\t\t\t: status === 'private'\n\t\t\t\t\t? __('Private', 'valu-block-components')\n\t\t\t\t\t: status === 'future'\n\t\t\t\t\t\t? __('Scheduled', 'valu-block-components')\n\t\t\t\t\t\t: status === 'trash'\n\t\t\t\t\t\t\t? __('Trash', 'valu-block-components')\n\t\t\t\t\t\t\t: label;\n\treturn <Pill tone={toneFor(status)}>{translated}</Pill>;\n};\n","import { useCallback, useEffect, useRef, type MouseEvent } from 'react';\nimport { Icon } from '@wordpress/components';\n\nimport {\n\tItemBody,\n\tOption,\n\tPrimaryText,\n\tSecondaryText,\n\tThumb,\n\tTypeHint,\n} from './styles';\nimport { StatusBadge } from './badges/StatusBadge';\nimport { humanizeType, resolveItemIcon, toDisplayUrl } from './utils';\nimport type {\n\tContentItem,\n\tContentPickerIconMap,\n\tSuggestionRenderState,\n} from './types';\n\nexport interface SuggestionItemProps {\n\titem: ContentItem;\n\toptionId: string;\n\thighlighted: boolean;\n\tselected: boolean;\n\tshowTypeHint: boolean;\n\tshowUrl: boolean;\n\ticons?: ContentPickerIconMap;\n\tonHover: () => void;\n\tonSelect: () => void;\n\trender?: (item: ContentItem, state: SuggestionRenderState) => React.ReactNode;\n}\n\nexport const SuggestionItem = ({\n\titem,\n\toptionId,\n\thighlighted,\n\tselected,\n\tshowTypeHint,\n\tshowUrl,\n\ticons,\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\t// Keep focus on the input; don't let a mousedown on the option steal it.\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 displayUrl = toDisplayUrl(item.url);\n\tconst hasAbnormalStatus = item.status && item.status !== 'publish';\n\tconst icon = resolveItemIcon(item, icons);\n\tconst isAvatar = item.kind === 'user' && Boolean(item.thumbnailUrl);\n\tconst hasVisual = Boolean(item.thumbnailUrl) || Boolean(icon);\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{hasVisual ? (\n\t\t\t\t<Thumb\n\t\t\t\t\thasImage={Boolean(item.thumbnailUrl) && !isAvatar}\n\t\t\t\t\tavatar={isAvatar}\n\t\t\t\t>\n\t\t\t\t\t{item.thumbnailUrl ? (\n\t\t\t\t\t\t<img src={item.thumbnailUrl} alt=\"\" loading=\"lazy\" />\n\t\t\t\t\t) : icon ? (\n\t\t\t\t\t\t<Icon icon={icon} size={22} />\n\t\t\t\t\t) : null}\n\t\t\t\t</Thumb>\n\t\t\t) : null}\n\t\t\t<ItemBody>\n\t\t\t\t<PrimaryText data-valu-title>{item.title}</PrimaryText>\n\t\t\t\t{showUrl && displayUrl ? <SecondaryText>{displayUrl}</SecondaryText> : null}\n\t\t\t</ItemBody>\n\t\t\t{hasAbnormalStatus ? <StatusBadge status={item.status!} /> : null}\n\t\t\t{showTypeHint ? (\n\t\t\t\t<TypeHint>{humanizeType(item.type, item.kind)}</TypeHint>\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\tGroupHeading,\n\tListbox,\n\tListboxScroll,\n\tLoadMoreRow,\n\tLoadingState,\n\tStickyHeader,\n} from './styles';\nimport { aria, humanizeType } from './utils';\nimport type {\n\tContentItem,\n\tContentKind,\n\tContentPickerIconMap,\n\tContentPickerLabels,\n} from './types';\n\nexport interface SuggestionListProps {\n\tlistboxId: string;\n\trootId: string;\n\tgroups: Array<[string, ContentItem[]]>;\n\tsuggestions: ContentItem[];\n\tkind: ContentKind;\n\tloading: boolean;\n\tfetchingMore: boolean;\n\thasMore: boolean;\n\terror: unknown;\n\tquery: string;\n\thighlightedIndex: number;\n\tselectedKeys: Set<string>;\n\ticons?: ContentPickerIconMap;\n\tlabels: ContentPickerLabels;\n\tshowUrl: boolean;\n\theaderSlot?: ReactNode;\n\trenderSuggestion?: (\n\t\titem: ContentItem,\n\t\tstate: { highlighted: boolean; selected: boolean },\n\t) => ReactNode;\n\trenderGroupHeading?: (type: string, items: ContentItem[]) => ReactNode;\n\tonHover: (index: number) => void;\n\tonSelect: (item: ContentItem) => void;\n\tonLoadMore: () => void;\n}\n\nexport const SuggestionList = ({\n\tlistboxId,\n\trootId,\n\tgroups,\n\tsuggestions,\n\tkind,\n\tloading,\n\tfetchingMore,\n\thasMore,\n\terror,\n\tquery,\n\thighlightedIndex,\n\tselectedKeys,\n\ticons,\n\tlabels,\n\tshowUrl,\n\theaderSlot,\n\trenderSuggestion,\n\trenderGroupHeading,\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 ?? __('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.empty ?? __('No matches. Try a different search.', 'valu-block-components'))\n\t\t\t\t: __('Type to search.', '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\tlet runningIndex = 0;\n\tconst showGroupHeadings = groups.length > 1 || groups[0]?.[0] !== '__all__';\n\tconst showTypeHint = !showGroupHeadings;\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 ?? __('Suggestions', 'valu-block-components')}\n\t\t\t>\n\t\t\t\t{groups.map(([type, items]) => {\n\t\t\t\t\tconst headingId = aria(rootId, `group-${type}`);\n\t\t\t\t\tconst optionNodes = items.map((item) => {\n\t\t\t\t\t\tconst index = runningIndex++;\n\t\t\t\t\t\tconst optionId = aria(rootId, `option-${index}`);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SuggestionItem\n\t\t\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\toptionId={optionId}\n\t\t\t\t\t\t\t\thighlighted={index === highlightedIndex}\n\t\t\t\t\t\t\t\tselected={selectedKeys.has(item.key)}\n\t\t\t\t\t\t\t\tshowTypeHint={showTypeHint}\n\t\t\t\t\t\t\t\tshowUrl={showUrl}\n\t\t\t\t\t\t\t\ticons={icons}\n\t\t\t\t\t\t\t\tonHover={() => onHover(index)}\n\t\t\t\t\t\t\t\tonSelect={() => onSelect(item)}\n\t\t\t\t\t\t\t\trender={renderSuggestion}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!showGroupHeadings) return optionNodes;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div role=\"group\" key={type} aria-labelledby={headingId}>\n\t\t\t\t\t\t\t<GroupHeading id={headingId}>\n\t\t\t\t\t\t\t\t{renderGroupHeading\n\t\t\t\t\t\t\t\t\t? renderGroupHeading(type, items)\n\t\t\t\t\t\t\t\t\t: humanizeType(type, kind)}\n\t\t\t\t\t\t\t</GroupHeading>\n\t\t\t\t\t\t\t{optionNodes}\n\t\t\t\t\t\t</div>\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 styled from '@emotion/styled';\nimport { __ } from '@wordpress/i18n';\n\nimport { tokens as t } from './styles/tokens';\nimport { humanizeType } from './utils';\nimport type { ContentKind } from './types';\n\nconst Row = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: ${t.spaceXs};\n\tpadding: 6px ${t.spaceMd};\n\toverflow-x: auto;\n\tborder-bottom: 1px solid ${t.gray200};\n\tbackground: ${t.bg};\n\n\t&::-webkit-scrollbar {\n\t\theight: 4px;\n\t}\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground: ${t.gray300};\n\t\tborder-radius: 2px;\n\t}\n`;\n\nconst Chip = styled.button<{ active?: boolean }>`\n\tflex: 0 0 auto;\n\tpadding: 2px 10px;\n\tfont-size: ${t.fontSizeSmall};\n\tfont-weight: ${t.fontWeightMedium};\n\tline-height: 1.6;\n\tborder-radius: 999px;\n\tborder: 1px solid ${({ active }) => (active ? t.accent : t.gray300)};\n\tbackground: ${({ active }) => (active ? t.accent : 'transparent')};\n\tcolor: ${({ active }) => (active ? '#fff' : t.gray900)};\n\tcursor: pointer;\n\twhite-space: nowrap;\n\ttransition: background ${t.transitionFast}, border-color ${t.transitionFast};\n\n\t&:hover {\n\t\tborder-color: ${t.accent};\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid ${t.accent};\n\t\toutline-offset: 1px;\n\t}\n`;\n\nexport interface TypeFilterProps {\n\ttypes: string[];\n\tkind: ContentKind;\n\tactive: string | null;\n\tonChange: (type: string | null) => void;\n\tallLabel?: string;\n}\n\nexport const TypeFilter = ({ types, kind, active, onChange, allLabel }: TypeFilterProps) => {\n\tif (types.length < 2) return null;\n\n\treturn (\n\t\t<Row role=\"toolbar\" aria-label={__('Filter by type', 'valu-block-components')}>\n\t\t\t<Chip\n\t\t\t\ttype=\"button\"\n\t\t\t\tactive={active === null}\n\t\t\t\taria-pressed={active === null}\n\t\t\t\tonClick={() => onChange(null)}\n\t\t\t\tonMouseDown={(e) => e.preventDefault()}\n\t\t\t>\n\t\t\t\t{allLabel ?? __('All', 'valu-block-components')}\n\t\t\t</Chip>\n\t\t\t{types.map((type) => (\n\t\t\t\t<Chip\n\t\t\t\t\tkey={type}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tactive={active === type}\n\t\t\t\t\taria-pressed={active === type}\n\t\t\t\t\tonClick={() => onChange(active === type ? null : type)}\n\t\t\t\t\tonMouseDown={(e) => e.preventDefault()}\n\t\t\t\t>\n\t\t\t\t\t{humanizeType(type, kind)}\n\t\t\t\t</Chip>\n\t\t\t))}\n\t\t</Row>\n\t);\n};\n","import apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\n\nimport type { ContentItem, ContentKind, ContentStatus, RequestContext } from '../types';\nimport { decodeTitle, generateKey } from '../utils';\n\nexport interface FetchSearchArgs {\n\tquery: string;\n\tkind: ContentKind;\n\ttypes?: string[];\n\tpage: number;\n\tperPage: number;\n\trequest?: (path: string, ctx: RequestContext) => string;\n\tsignal?: AbortSignal;\n}\n\nexport interface FetchSearchPage {\n\titems: ContentItem[];\n\tpage: number;\n\thasMore: boolean;\n\ttotal: number;\n}\n\ninterface WPRestSearchResult {\n\tid: number;\n\ttitle: string;\n\turl?: string;\n\ttype: string;\n\tsubtype: string;\n\t_embedded?: {\n\t\tself?: Array<{\n\t\t\tstatus?: ContentStatus;\n\t\t\tfeatured_media?: number;\n\t\t\t['wp:featuredmedia']?: unknown;\n\t\t}>;\n\t\t'wp:featuredmedia'?: Array<{\n\t\t\tsource_url?: string;\n\t\t\tmedia_details?: {\n\t\t\t\tsizes?: Record<string, { source_url?: string }>;\n\t\t\t};\n\t\t}>;\n\t};\n}\n\ninterface WPUser {\n\tid: number;\n\tname: string;\n\tlink?: string;\n\tavatar_urls?: Record<string, string>;\n}\n\nconst pickThumbnail = (result: WPRestSearchResult): string | undefined => {\n\tconst media = result._embedded?.['wp:featuredmedia']?.[0];\n\tif (!media) return undefined;\n\tconst sizes = media.media_details?.sizes;\n\treturn (\n\t\tsizes?.thumbnail?.source_url ??\n\t\tsizes?.medium?.source_url ??\n\t\tmedia.source_url ??\n\t\tundefined\n\t);\n};\n\nconst pickStatus = (result: WPRestSearchResult): ContentStatus | undefined =>\n\tresult._embedded?.self?.[0]?.status;\n\nconst buildPath = (args: FetchSearchArgs): string => {\n\tconst { kind, types, query, page, perPage } = args;\n\tif (kind === 'user') {\n\t\treturn addQueryArgs('/wp/v2/users', {\n\t\t\tsearch: query,\n\t\t\tper_page: perPage,\n\t\t\tpage,\n\t\t\tcontext: 'view',\n\t\t});\n\t}\n\tconst params: Record<string, string | number> = {\n\t\tsearch: query,\n\t\ttype: kind,\n\t\tper_page: perPage,\n\t\tpage,\n\t\t_embed: 'wp:featuredmedia,self',\n\t};\n\tif (types && types.length > 0) {\n\t\tparams.subtype = types.join(',');\n\t}\n\treturn addQueryArgs('/wp/v2/search', params);\n};\n\nconst parseTotalPages = (response: Response): number => {\n\tconst raw = response.headers.get('x-wp-totalpages');\n\tif (!raw) return 1;\n\tconst parsed = parseInt(raw, 10);\n\treturn Number.isNaN(parsed) ? 1 : parsed;\n};\n\nconst parseTotal = (response: Response): number => {\n\tconst raw = response.headers.get('x-wp-total');\n\tif (!raw) return 0;\n\tconst parsed = parseInt(raw, 10);\n\treturn Number.isNaN(parsed) ? 0 : parsed;\n};\n\nexport const fetchSearch = async (args: FetchSearchArgs): Promise<FetchSearchPage> => {\n\tconst rawPath = buildPath(args);\n\tconst path = args.request\n\t\t? args.request(rawPath, { query: args.query, page: args.page, kind: args.kind })\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 = parseTotalPages(response);\n\tconst total = parseTotal(response);\n\n\tlet items: ContentItem[];\n\tif (args.kind === 'user') {\n\t\titems = (data as WPUser[]).map((u) => ({\n\t\t\tkey: generateKey(),\n\t\t\tid: u.id,\n\t\t\ttype: 'user',\n\t\t\tkind: 'user',\n\t\t\ttitle: decodeTitle(u.name),\n\t\t\turl: u.link,\n\t\t\tthumbnailUrl: u.avatar_urls?.['48'] ?? u.avatar_urls?.['96'],\n\t\t\traw: u,\n\t\t}));\n\t} else {\n\t\titems = (data as WPRestSearchResult[]).map((r) => ({\n\t\t\tkey: generateKey(),\n\t\t\tid: r.id,\n\t\t\ttype: r.subtype || r.type,\n\t\t\tkind: args.kind,\n\t\t\ttitle: decodeTitle(r.title),\n\t\t\turl: r.url,\n\t\t\tstatus: pickStatus(r),\n\t\t\tthumbnailUrl: pickThumbnail(r),\n\t\t\traw: r,\n\t\t}));\n\t}\n\n\treturn { items, page: args.page, hasMore: args.page < totalPages, total };\n};\n","import { useInfiniteQuery, keepPreviousData } from '@tanstack/react-query';\n\nimport { fetchSearch } from '../api/fetchSearch';\nimport type { ContentKind, RequestContext } from '../types';\n\nexport interface UseContentSearchArgs {\n\tquery: string;\n\tkind: ContentKind;\n\ttypes?: string[];\n\tperPage: number;\n\tenabled?: boolean;\n\trequest?: (path: string, ctx: RequestContext) => string;\n}\n\nexport const contentSearchKey = (args: UseContentSearchArgs) =>\n\t[\n\t\t'valu/content-search',\n\t\targs.kind,\n\t\t[...(args.types ?? [])].sort().join(','),\n\t\targs.query,\n\t\targs.perPage,\n\t] as const;\n\nexport const useContentSearch = (args: UseContentSearchArgs) =>\n\tuseInfiniteQuery({\n\t\tqueryKey: contentSearchKey(args),\n\t\tqueryFn: ({ pageParam, signal }) =>\n\t\t\tfetchSearch({\n\t\t\t\tquery: args.query,\n\t\t\t\tkind: args.kind,\n\t\t\t\ttypes: args.types,\n\t\t\t\tpage: pageParam,\n\t\t\t\tperPage: args.perPage,\n\t\t\t\trequest: 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 { useSelect } from '@wordpress/data';\nimport { __, _n, sprintf } from '@wordpress/i18n';\n\nimport { useContentSearch } from './useContentSearch';\nimport { useDebouncedValue } from './useDebouncedValue';\nimport { useLiveRegion } from './useLiveRegion';\nimport { useKeyboardNav } from './useKeyboardNav';\nimport { dedupeAgainst, generateKey, groupByType, isMaxedOut } from '../utils';\nimport type { ContentItem, ContentPickerProps } from '../types';\n\nexport interface ContentPickerControllerArgs {\n\tkind: NonNullable<ContentPickerProps['kind']>;\n\ttypes?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\texcludeCurrentPost: boolean;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tgroupByType: boolean;\n\tfilter?: ContentPickerProps['filter'];\n\trequest?: ContentPickerProps['request'];\n\tvalue: ContentItem[];\n\tonChange: (items: ContentItem[]) => void;\n\t/** Whether the suggestion UI is currently open/visible (controls `enabled`). */\n\tactive: boolean;\n\t/** When true, ignore empty query and fetch anyway (inline variant + fetchOnOpen). */\n\tfetchEmpty: boolean;\n\tonSelectSideEffect?: () => void;\n\tonEscape?: () => void;\n}\n\nexport interface ContentPickerController {\n\tquery: string;\n\tsetQuery: (value: string) => void;\n\tdebouncedQuery: string;\n\tsuggestions: ContentItem[];\n\tgroups: Array<[string, ContentItem[]]>;\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: ContentItem) => void;\n\tremove: (key: string) => void;\n\treorder: (from: number, to: number) => void;\n\treplace: (items: ContentItem[]) => void;\n\tmaxedOut: boolean;\n\ttotal: number;\n\tactiveTypeFilter: string | null;\n\tsetActiveTypeFilter: (type: string | null) => void;\n\teffectiveSearchTypes: string[] | undefined;\n}\n\nexport const useContentPickerController = (\n\targs: ContentPickerControllerArgs,\n): ContentPickerController => {\n\tconst {\n\t\tkind,\n\t\ttypes,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\texcludeCurrentPost,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tgroupByType: groupByTypeFlag,\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 [activeTypeFilter, setActiveTypeFilter] = useState<string | null>(null);\n\tconst debouncedQuery = useDebouncedValue(query, inputDelayMs);\n\n\tconst effectiveSearchTypes = useMemo(() => {\n\t\tif (activeTypeFilter && types && types.includes(activeTypeFilter)) {\n\t\t\treturn [activeTypeFilter];\n\t\t}\n\t\treturn types;\n\t}, [activeTypeFilter, types]);\n\n\tconst currentPostId = useSelect((select) => {\n\t\tif (!excludeCurrentPost || kind !== 'post') return 0;\n\t\tconst editor = select('core/editor' as never) as\n\t\t\t| { getCurrentPostId?: () => number | null }\n\t\t\t| undefined;\n\t\treturn editor?.getCurrentPostId?.() ?? 0;\n\t}, [excludeCurrentPost, kind]);\n\n\tconst enabled = active && (fetchEmpty || debouncedQuery.trim().length > 0);\n\n\tconst query_ = useContentSearch({\n\t\tquery: debouncedQuery,\n\t\tkind,\n\t\ttypes: effectiveSearchTypes,\n\t\tperPage,\n\t\tenabled,\n\t\trequest,\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 (currentPostId) {\n\t\t\tfiltered = filtered.filter((item) => item.id !== currentPostId);\n\t\t}\n\t\tif (filter) {\n\t\t\tfiltered = filter(filtered, { query: debouncedQuery, kind });\n\t\t}\n\t\treturn filtered;\n\t}, [query_.data, value, uniqueItems, currentPostId, filter, debouncedQuery, kind]);\n\n\tconst shouldGroup = groupByTypeFlag && (effectiveSearchTypes?.length ?? 0) > 1;\n\tconst groups = useMemo<Array<[string, ContentItem[]]>>(\n\t\t() => (shouldGroup ? groupByType(suggestions) : [['__all__', suggestions]]),\n\t\t[shouldGroup, suggestions],\n\t);\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 result', '%d results', count, 'valu-block-components'),\n\t\t\t\tcount,\n\t\t\t),\n\t\t);\n\t}, [suggestions.length, query_.isFetching, query_.isError, active, debouncedQuery, fetchEmpty, announce]);\n\n\tconst maxedOut = isMaxedOut(value, maxItems);\n\n\tconst replace = useCallback((items: ContentItem[]) => onChange(items), [onChange]);\n\n\tconst select = useCallback(\n\t\t(item: ContentItem) => {\n\t\t\tif (maxedOut) return;\n\t\t\tconst limited = maxItems === 1;\n\t\t\tconst normalized: ContentItem = {\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\t\t\tconst next = limited ? [normalized] : [...value, normalized];\n\t\t\tonChange(next);\n\t\t\tannounceImmediate(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: 1: title, 2: selected count */\n\t\t\t\t\t__('Added %1$s. %2$d selected.', 'valu-block-components'),\n\t\t\t\t\tnormalized.title,\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[maxedOut, maxItems, value, onChange, announceImmediate, onSelectSideEffect],\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 item */\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 { highlightedIndex, setHighlightedIndex, reset: resetHighlight, handleKeyDown } =\n\t\tuseKeyboardNav({\n\t\t\titemCount: suggestions.length,\n\t\t\tonSelect: (i) => {\n\t\t\t\tconst item = suggestions[i];\n\t\t\t\tif (item) select(item);\n\t\t\t},\n\t\t\tonEscape,\n\t\t});\n\n\tuseEffect(() => {\n\t\tresetHighlight();\n\t}, [debouncedQuery, activeTypeFilter, resetHighlight]);\n\n\treturn {\n\t\tquery,\n\t\tsetQuery,\n\t\tdebouncedQuery,\n\t\tsuggestions,\n\t\tgroups,\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\tremove,\n\t\treorder,\n\t\treplace,\n\t\tmaxedOut,\n\t\ttotal: query_.data?.pages[0]?.total ?? 0,\n\t\tactiveTypeFilter,\n\t\tsetActiveTypeFilter,\n\t\teffectiveSearchTypes,\n\t};\n};\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 { TypeFilter } from './TypeFilter';\nimport { useContentPickerController } from './hooks/useContentPickerController';\nimport { aria } from './utils';\nimport { MaxedOutBanner } from './styles';\nimport { EmotionCacheProvider } from './styles/emotionCache';\nimport type { ContentItem, ContentPickerLabels, ContentPickerProps } from './types';\n\nexport interface ContentPickerPopoverProps {\n\trootId: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tplaceholder?: string;\n\tkind: NonNullable<ContentPickerProps['kind']>;\n\ttypes?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\texcludeCurrentPost: boolean;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tgroupByType: boolean;\n\tfetchOnOpen: boolean;\n\tfilter?: ContentPickerProps['filter'];\n\trequest?: ContentPickerProps['request'];\n\trenderSuggestion?: ContentPickerProps['renderSuggestion'];\n\trenderGroupHeading?: ContentPickerProps['renderGroupHeading'];\n\ticons?: ContentPickerProps['icons'];\n\tdisableTypeFilter?: boolean;\n\tshowUrl?: boolean;\n\tvalue: ContentItem[];\n\tonChange: (items: ContentItem[]) => void;\n\tlabels: ContentPickerLabels;\n}\n\nexport const ContentPickerPopover = (props: ContentPickerPopoverProps) => {\n\tconst {\n\t\trootId,\n\t\tlabel,\n\t\thideLabelFromVision,\n\t\thelp,\n\t\tplaceholder,\n\t\tkind,\n\t\ttypes,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\texcludeCurrentPost,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tgroupByType,\n\t\tfetchOnOpen,\n\t\tfilter,\n\t\trequest,\n\t\trenderSuggestion,\n\t\trenderGroupHeading,\n\t\ticons,\n\t\tdisableTypeFilter,\n\t\tshowUrl,\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 = useContentPickerController({\n\t\tkind,\n\t\ttypes,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\texcludeCurrentPost,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tgroupByType,\n\t\tfilter,\n\t\trequest,\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\n\t\t\tconst input = inputRef.current;\n\t\t\tconst body = popoverBodyRef.current;\n\t\t\tconst anchorContainer = input?.closest('div') ?? input;\n\n\t\t\t// Clicks on the input row or anywhere inside the popover body keep it open.\n\t\t\tif (anchorContainer && anchorContainer.contains(target)) return;\n\t\t\tif (body && body.contains(target)) return;\n\n\t\t\tsetOpen(false);\n\t\t};\n\n\t\t// Use capture so we beat stopPropagation inside descendants; mousedown\n\t\t// fires before the click, which keeps the close snappy and prevents the\n\t\t// focus jump from re-opening the popover.\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\tplaceholder={placeholder}\n\t\t\t\tlabel={label}\n\t\t\t\thideLabelFromVision={hideLabelFromVision}\n\t\t\t\thelp={help}\n\t\t\t\tdisabled={disabled}\n\t\t\t\topen={open && !disabled}\n\t\t\t\tlistboxId={listboxId}\n\t\t\t\tactiveOptionId={activeOptionId}\n\t\t\t\tlabels={labels}\n\t\t\t/>\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-content-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\tgroups={controller.groups}\n\t\t\t\t\t\t\t\tsuggestions={controller.suggestions}\n\t\t\t\t\t\t\t\tkind={kind}\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\ticons={icons}\n\t\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\t\tshowUrl={showUrl ?? true}\n\t\t\t\t\t\t\t\theaderSlot={\n\t\t\t\t\t\t\t\t\t!disableTypeFilter && types && types.length > 1 ? (\n\t\t\t\t\t\t\t\t\t\t<TypeFilter\n\t\t\t\t\t\t\t\t\t\t\ttypes={types}\n\t\t\t\t\t\t\t\t\t\t\tkind={kind}\n\t\t\t\t\t\t\t\t\t\t\tactive={controller.activeTypeFilter}\n\t\t\t\t\t\t\t\t\t\t\tonChange={controller.setActiveTypeFilter}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\trenderSuggestion={renderSuggestion}\n\t\t\t\t\t\t\t\trenderGroupHeading={renderGroupHeading}\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 { TypeFilter } from './TypeFilter';\nimport { useContentPickerController } from './hooks/useContentPickerController';\nimport { aria } from './utils';\nimport { MaxedOutBanner, SuggestionsShell } from './styles';\nimport type { ContentItem, ContentPickerLabels, ContentPickerProps } from './types';\n\nexport interface ContentPickerInlineProps {\n\trootId: string;\n\tlabel: string;\n\thideLabelFromVision: boolean;\n\thelp?: string;\n\tplaceholder?: string;\n\tkind: NonNullable<ContentPickerProps['kind']>;\n\ttypes?: string[];\n\tperPage: number;\n\tinputDelayMs: number;\n\texcludeCurrentPost: boolean;\n\tuniqueItems: boolean;\n\tmaxItems: number;\n\tgroupByType: boolean;\n\tfetchOnOpen: boolean;\n\tfilter?: ContentPickerProps['filter'];\n\trequest?: ContentPickerProps['request'];\n\trenderSuggestion?: ContentPickerProps['renderSuggestion'];\n\trenderGroupHeading?: ContentPickerProps['renderGroupHeading'];\n\ticons?: ContentPickerProps['icons'];\n\tdisableTypeFilter?: boolean;\n\tshowUrl?: boolean;\n\tvalue: ContentItem[];\n\tonChange: (items: ContentItem[]) => void;\n\tlabels: ContentPickerLabels;\n}\n\nexport const ContentPickerInline = (props: ContentPickerInlineProps) => {\n\tconst {\n\t\trootId,\n\t\tlabel,\n\t\thideLabelFromVision,\n\t\thelp,\n\t\tplaceholder,\n\t\tkind,\n\t\ttypes,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\texcludeCurrentPost,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tgroupByType,\n\t\tfetchOnOpen,\n\t\tfilter,\n\t\trequest,\n\t\trenderSuggestion,\n\t\trenderGroupHeading,\n\t\ticons,\n\t\tdisableTypeFilter,\n\t\tshowUrl,\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 = useContentPickerController({\n\t\tkind,\n\t\ttypes,\n\t\tperPage,\n\t\tinputDelayMs,\n\t\texcludeCurrentPost,\n\t\tuniqueItems,\n\t\tmaxItems,\n\t\tgroupByType,\n\t\tfilter,\n\t\trequest,\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\tplaceholder={placeholder}\n\t\t\t\tlabel={label}\n\t\t\t\thideLabelFromVision={hideLabelFromVision}\n\t\t\t\thelp={help}\n\t\t\t\tdisabled={disabled}\n\t\t\t\topen={shouldShowList}\n\t\t\t\tlistboxId={listboxId}\n\t\t\t\tactiveOptionId={activeOptionId}\n\t\t\t\tlabels={labels}\n\t\t\t/>\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\tgroups={controller.groups}\n\t\t\t\t\t\tsuggestions={controller.suggestions}\n\t\t\t\t\t\tkind={kind}\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\ticons={icons}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tshowUrl={showUrl ?? true}\n\t\t\t\t\t\theaderSlot={\n\t\t\t\t\t\t\t!disableTypeFilter && types && types.length > 1 ? (\n\t\t\t\t\t\t\t\t<TypeFilter\n\t\t\t\t\t\t\t\t\ttypes={types}\n\t\t\t\t\t\t\t\t\tkind={kind}\n\t\t\t\t\t\t\t\t\tactive={controller.activeTypeFilter}\n\t\t\t\t\t\t\t\t\tonChange={controller.setActiveTypeFilter}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\trenderSuggestion={renderSuggestion}\n\t\t\t\t\t\trenderGroupHeading={renderGroupHeading}\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 styled from '@emotion/styled';\n\nimport { tokens as t } from '../styles/tokens';\nimport type { ContentKind } from '../types';\nimport { humanizeType } from '../utils';\n\nconst Pill = styled.span`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tpadding: 1px 6px;\n\tbackground: transparent;\n\tcolor: ${t.gray600};\n\tborder: 1px solid ${t.gray300};\n\tborder-radius: 999px;\n\tfont-size: 10px;\n\tfont-weight: ${t.fontWeightBold};\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n\twhite-space: nowrap;\n\tline-height: 1.6;\n`;\n\nexport interface TypeBadgeProps {\n\ttype: string;\n\tkind: ContentKind;\n\t/** Override the displayed label (e.g. from renderItemType). */\n\tlabel?: string;\n}\n\nexport const TypeBadge = ({ type, kind, label }: TypeBadgeProps) => (\n\t<Pill>{label ?? humanizeType(type, kind)}</Pill>\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\tDragHandleButton,\n\tItemBody,\n\tPrimaryText,\n\tSelectedRow,\n\tThumb,\n} from './styles';\nimport { StatusBadge } from './badges/StatusBadge';\nimport { TypeBadge } from './badges/TypeBadge';\nimport { resolveItemIcon } from './utils';\nimport type {\n\tContentPickerIconMap,\n\tContentPickerLabels,\n\tResolvedContentItem,\n} from './types';\n\nexport interface SelectedItemProps {\n\titem: ResolvedContentItem;\n\tindex: number;\n\ttotal: number;\n\torderable: boolean;\n\tshowTypeBadge: boolean;\n\ticons?: ContentPickerIconMap;\n\tlabels: ContentPickerLabels;\n\tonRemove: () => void;\n\tonMoveUp?: () => void;\n\tonMoveDown?: () => void;\n\trender?: (item: ResolvedContentItem) => ReactNode;\n}\n\nexport const SelectedItem = ({\n\titem,\n\tindex,\n\ttotal,\n\torderable,\n\tshowTypeBadge,\n\ticons,\n\tlabels,\n\tonRemove,\n\tonMoveUp,\n\tonMoveDown,\n\trender,\n}: SelectedItemProps) => {\n\tconst { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n\t\tid: item.key,\n\t\tdisabled: !orderable,\n\t});\n\n\tconst style: CSSProperties = {\n\t\ttransform: CSS.Translate.toString(transform),\n\t\ttransition,\n\t\topacity: isDragging ? 0 : 1,\n\t};\n\n\tconst isMissing = item.missing === 'deleted';\n\tconst isTrash = item.missing === 'trash';\n\tconst missingLabel =\n\t\tlabels.missing ?? __('This item is no longer available.', 'valu-block-components');\n\tconst trashLabel =\n\t\tlabels.statusTrash ?? __('This item is in the trash.', '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: item 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: item 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: item title */\n\t\t\t\t__('Move %s down', 'valu-block-components'),\n\t\t\t\titem.title,\n\t\t\t);\n\tconst hasAbnormalStatus = item.status && item.status !== 'publish';\n\tconst resolvedIcon = resolveItemIcon(item, icons);\n\tconst hasThumbImage = Boolean(item.thumbnailUrl) && !isMissing && !isTrash;\n\tconst isAvatar = item.kind === 'user' && hasThumbImage;\n\tconst hasVisual = isMissing || isTrash || hasThumbImage || Boolean(resolvedIcon);\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 || isTrash}\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{hasVisual ? (\n\t\t\t\t<Thumb\n\t\t\t\t\thasImage={hasThumbImage && !isAvatar}\n\t\t\t\t\tavatar={isAvatar}\n\t\t\t\t\tmissing={isMissing || isTrash}\n\t\t\t\t>\n\t\t\t\t\t{isMissing || isTrash ? (\n\t\t\t\t\t\t<Icon icon={caution} size={22} />\n\t\t\t\t\t) : hasThumbImage ? (\n\t\t\t\t\t\t<img src={item.thumbnailUrl} alt=\"\" loading=\"lazy\" />\n\t\t\t\t\t) : resolvedIcon ? (\n\t\t\t\t\t\t<Icon icon={resolvedIcon} size={22} />\n\t\t\t\t\t) : null}\n\t\t\t\t</Thumb>\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<ItemBody>\n\t\t\t\t\t<PrimaryText muted={isMissing || isTrash} title={item.title}>\n\t\t\t\t\t\t{isMissing ? missingLabel : isTrash ? trashLabel : item.title}\n\t\t\t\t\t</PrimaryText>\n\t\t\t\t</ItemBody>\n\t\t\t)}\n\t\t\t{!isMissing && showTypeBadge ? (\n\t\t\t\t<TypeBadge type={item.type} kind={item.kind} />\n\t\t\t) : null}\n\t\t\t{!isMissing && hasAbnormalStatus ? (\n\t\t\t\t<StatusBadge status={item.status!} />\n\t\t\t) : null}\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 { ContentItem, ContentKind, ContentStatus, ResolvedContentItem } from '../types';\nimport { decodeTitle } from '../utils';\n\ninterface EntityRecord {\n\tid: number;\n\tstatus?: ContentStatus;\n\ttitle?: { rendered?: string } | string;\n\tname?: string;\n\tlink?: string;\n\tfeatured_media?: number;\n}\n\nconst entityKindFor = (kind: ContentKind): 'postType' | 'taxonomy' | 'root' => {\n\tif (kind === 'post') return 'postType';\n\tif (kind === 'term') return 'taxonomy';\n\treturn 'root';\n};\n\nconst entityNameFor = (kind: ContentKind, type: string): string => {\n\tif (kind === 'user') return 'user';\n\treturn type;\n};\n\n/**\n * Hydrate picked items from the core-data store so we can detect trash /\n * deletion and show fresh titles. Batches one call per distinct `type`.\n */\nexport const useResolvedItems = (value: ContentItem[]): ResolvedContentItem[] => {\n\tconst distinctTypes = useMemo(() => {\n\t\tconst map = new Map<string, { kind: ContentKind; ids: number[] }>();\n\t\tfor (const item of value) {\n\t\t\tconst key = `${item.kind}:${item.type}`;\n\t\t\tconst bucket = map.get(key);\n\t\t\tif (bucket) bucket.ids.push(item.id);\n\t\t\telse map.set(key, { kind: item.kind, ids: [item.id] });\n\t\t}\n\t\treturn Array.from(map.entries()).map(([key, v]) => ({ key, ...v }));\n\t}, [value]);\n\n\tconst records = useSelect(\n\t\t(select) => {\n\t\t\tconst core = select(coreStore);\n\t\t\tconst out: Record<string, { record: EntityRecord | null; resolved: boolean }> = {};\n\t\t\tfor (const item of value) {\n\t\t\t\tconst kindKey = entityKindFor(item.kind);\n\t\t\t\tconst nameKey = entityNameFor(item.kind, item.type);\n\t\t\t\tconst record = core.getEntityRecord(kindKey, nameKey, item.id) as\n\t\t\t\t\t| EntityRecord\n\t\t\t\t\t| null\n\t\t\t\t\t| undefined;\n\t\t\t\tconst resolved = core.hasFinishedResolution('getEntityRecord', [\n\t\t\t\t\tkindKey,\n\t\t\t\t\tnameKey,\n\t\t\t\t\titem.id,\n\t\t\t\t]);\n\t\t\t\tout[`${item.kind}:${item.type}:${item.id}`] = {\n\t\t\t\t\trecord: record ?? null,\n\t\t\t\t\tresolved,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\t[value, distinctTypes],\n\t);\n\n\treturn useMemo(\n\t\t() =>\n\t\t\tvalue.map((item): ResolvedContentItem => {\n\t\t\t\tconst resolvedEntry = records[`${item.kind}:${item.type}:${item.id}`];\n\t\t\t\tif (!resolvedEntry) return item;\n\t\t\t\tconst { record, resolved } = resolvedEntry;\n\n\t\t\t\tif (!resolved) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t\tif (!record) {\n\t\t\t\t\treturn { ...item, missing: 'deleted' };\n\t\t\t\t}\n\t\t\t\tif (record.status === 'trash') {\n\t\t\t\t\treturn { ...item, missing: 'trash', status: 'trash' };\n\t\t\t\t}\n\t\t\t\tconst freshTitle =\n\t\t\t\t\tdecodeTitle(record.title) || (record.name ? decodeTitle(record.name) : '');\n\t\t\t\treturn {\n\t\t\t\t\t...item,\n\t\t\t\t\ttitle: freshTitle || item.title,\n\t\t\t\t\tstatus: record.status ?? item.status,\n\t\t\t\t\turl: record.link ?? item.url,\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 './DragChip';\nimport { useResolvedItems } from './hooks/useResolvedItems';\nimport {\n\tCountPill,\n\tHeaderRow,\n\tHeaderTitle,\n\tSelectedListEl,\n} from './styles';\nimport type {\n\tContentItem,\n\tContentPickerIconMap,\n\tContentPickerLabels,\n\tResolvedContentItem,\n} from './types';\n\nexport interface SelectedListProps {\n\tvalue: ContentItem[];\n\torderable: boolean;\n\tmaxItems: number;\n\tlabels: ContentPickerLabels;\n\tonChange: (next: ContentItem[]) => void;\n\trenderSelected?: (item: ResolvedContentItem) => ReactNode;\n\tshowHeader?: boolean;\n\tshowTypeBadge: boolean;\n\ticons?: ContentPickerIconMap;\n}\n\nexport const SelectedList = ({\n\tvalue,\n\torderable,\n\tmaxItems,\n\tlabels,\n\tonChange,\n\trenderSelected,\n\tshowHeader = true,\n\tshowTypeBadge,\n\ticons,\n}: SelectedListProps) => {\n\tconst resolved = useResolvedItems(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\tshowTypeBadge={showTypeBadge}\n\t\t\ticons={icons}\n\t\t\tlabels={labels}\n\t\t\tonRemove={() => remove(item.key)}\n\t\t\tonMoveUp={index > 0 ? () => reorder(index, index - 1) : undefined}\n\t\t\tonMoveDown={\n\t\t\t\tindex < resolved.length - 1 ? () => reorder(index, index + 1) : undefined\n\t\t\t}\n\t\t\trender={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 { ContentPickerPopover } from './ContentPickerPopover';\nimport { ContentPickerInline } from './ContentPickerInline';\nimport { SelectedList } from './SelectedList';\nimport { EmotionCacheProvider } from './styles/emotionCache';\nimport { Root } from './styles';\nimport type {\n\tContentItem,\n\tContentPickerLabels,\n\tContentPickerProps,\n} from './types';\n\nconst DEFAULT_LABELS: ContentPickerLabels = {};\n\nconst defaultTypesFor = (kind: NonNullable<ContentPickerProps['kind']>): string[] => {\n\tif (kind === 'post') return ['post', 'page'];\n\tif (kind === 'term') return ['category', 'post_tag'];\n\treturn [];\n};\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 * `<ContentPicker />` — search for and attach WordPress posts, pages,\n * custom post types, taxonomy terms, or users to a block.\n *\n * The component is **controlled** when `value` is defined, and\n * **uncontrolled** (with optional `defaultValue`) otherwise. In both modes\n * `onChange` fires with the full next array.\n *\n * @example\n * <ContentPicker\n * label=\"Related posts\"\n * variant=\"popover\"\n * kind=\"post\"\n * types={['post', 'page']}\n * maxItems={5}\n * orderable\n * value={related}\n * onChange={setRelated}\n * />\n */\nexport const ContentPicker = ({\n\tlabel,\n\thideLabelFromVision = false,\n\thelp,\n\tkind = 'post',\n\ttypes,\n\tvariant = 'popover',\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tmaxItems = Infinity,\n\torderable,\n\tplaceholder,\n\tperPage,\n\tinputDelayMs = 250,\n\tfetchOnOpen = false,\n\texcludeCurrentPost = true,\n\tuniqueItems = true,\n\tgroupByType,\n\tshowTypeBadge,\n\ticons,\n\tdisableTypeFilter,\n\tshowUrl,\n\tfilter,\n\trequest,\n\trenderSuggestion,\n\trenderSelected,\n\trenderGroupHeading,\n\tlabels = DEFAULT_LABELS,\n\tclassName,\n\tid,\n}: ContentPickerProps) => {\n\tconst reactId = useId();\n\tconst rootId = id ?? `valu-cp-${reactId.replace(/:/g, '')}`;\n\n\tconst [uncontrolled, setUncontrolled] = useState<ContentItem[]>(defaultValue ?? []);\n\tconst isControlled = controlledValue !== undefined;\n\tconst value = isControlled ? controlledValue : uncontrolled;\n\n\tconst handleChange = useCallback(\n\t\t(next: ContentItem[]) => {\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 effectiveTypes = types ?? defaultTypesFor(kind);\n\tconst effectivePerPage = perPage ?? (variant === 'popover' ? 10 : 20);\n\tconst effectiveOrderable = orderable ?? (Number.isFinite(maxItems) ? maxItems > 1 : true);\n\tconst effectiveGroupByType = groupByType ?? effectiveTypes.length > 1;\n\tconst effectiveShowTypeBadge = showTypeBadge ?? effectiveTypes.length > 1;\n\n\tconst queryClientRef = useRef<QueryClient | null>(null);\n\tif (!queryClientRef.current) queryClientRef.current = makeQueryClient();\n\n\tconst showInput = !(Number.isFinite(maxItems) && value.length >= maxItems);\n\n\tconst variantProps = useMemo(\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\tkind,\n\t\t\ttypes: effectiveTypes,\n\t\t\tperPage: effectivePerPage,\n\t\t\tinputDelayMs,\n\t\t\texcludeCurrentPost,\n\t\t\tuniqueItems,\n\t\t\tmaxItems,\n\t\t\tgroupByType: effectiveGroupByType,\n\t\t\tfetchOnOpen,\n\t\t\tfilter,\n\t\t\trequest,\n\t\t\trenderSuggestion,\n\t\t\trenderGroupHeading,\n\t\t\ticons,\n\t\t\tdisableTypeFilter,\n\t\t\tshowUrl,\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\tkind,\n\t\t\teffectiveTypes,\n\t\t\teffectivePerPage,\n\t\t\tinputDelayMs,\n\t\t\texcludeCurrentPost,\n\t\t\tuniqueItems,\n\t\t\tmaxItems,\n\t\t\teffectiveGroupByType,\n\t\t\tfetchOnOpen,\n\t\t\tfilter,\n\t\t\trequest,\n\t\t\trenderSuggestion,\n\t\t\trenderGroupHeading,\n\t\t\ticons,\n\t\t\tdisableTypeFilter,\n\t\t\tshowUrl,\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={className}>\n\t\t\t\t\t{showInput ? (\n\t\t\t\t\t\tvariant === 'popover' ? (\n\t\t\t\t\t\t\t<ContentPickerPopover {...variantProps} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ContentPickerInline {...variantProps} />\n\t\t\t\t\t\t)\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\trenderSelected={renderSelected}\n\t\t\t\t\t\tshowHeader={value.length > 0}\n\t\t\t\t\t\tshowTypeBadge={effectiveShowTypeBadge}\n\t\t\t\t\t\ticons={icons}\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"]}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ComponentProps, ReactNode } from 'react';
|
|
3
|
+
import { Icon } from '@wordpress/components';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Anything `<Icon icon={…}>` from @wordpress/components accepts:
|
|
7
|
+
* a JSX element, a React component, a Dashicon string, an SVG, etc.
|
|
8
|
+
*/
|
|
9
|
+
type ContentPickerIcon = ComponentProps<typeof Icon>['icon'];
|
|
10
|
+
/**
|
|
11
|
+
* Map of post-type / taxonomy / `user` slug to an icon renderer.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* icons={{
|
|
15
|
+
* product: myProductIcon, // custom component
|
|
16
|
+
* category: category, // from @wordpress/icons
|
|
17
|
+
* post_tag: tag,
|
|
18
|
+
* }}
|
|
19
|
+
*/
|
|
20
|
+
type ContentPickerIconMap = Record<string, ContentPickerIcon>;
|
|
21
|
+
/**
|
|
22
|
+
* What kind of WordPress entity this picker searches.
|
|
23
|
+
* - `post` — posts, pages, or any custom post type
|
|
24
|
+
* - `term` — taxonomy terms
|
|
25
|
+
* - `user` — users
|
|
26
|
+
*/
|
|
27
|
+
type ContentKind = 'post' | 'term' | 'user';
|
|
28
|
+
type ContentStatus = 'publish' | 'future' | 'draft' | 'pending' | 'private' | 'trash' | 'auto-draft' | 'inherit';
|
|
29
|
+
type ContentPickerVariant = 'popover' | 'inline';
|
|
30
|
+
/** Reason a picked item can't be displayed normally. */
|
|
31
|
+
type MissingReason = 'deleted' | 'trash';
|
|
32
|
+
/**
|
|
33
|
+
* The shape of a picked / suggested content item.
|
|
34
|
+
*
|
|
35
|
+
* `key` is a stable client-side uuid — use it for React keys so duplicates
|
|
36
|
+
* and reorders don't collide. `id` is the WordPress entity id.
|
|
37
|
+
*/
|
|
38
|
+
interface ContentItem {
|
|
39
|
+
key: string;
|
|
40
|
+
id: number;
|
|
41
|
+
type: string;
|
|
42
|
+
kind: ContentKind;
|
|
43
|
+
title: string;
|
|
44
|
+
url?: string;
|
|
45
|
+
status?: ContentStatus;
|
|
46
|
+
thumbnailUrl?: string;
|
|
47
|
+
excerpt?: string;
|
|
48
|
+
/** Raw REST record — lets consumer filters reach beyond the normalized shape. */
|
|
49
|
+
raw?: unknown;
|
|
50
|
+
}
|
|
51
|
+
/** A picked item that has been resolved against the current entity store. */
|
|
52
|
+
interface ResolvedContentItem extends ContentItem {
|
|
53
|
+
missing?: MissingReason;
|
|
54
|
+
}
|
|
55
|
+
/** i18n bag for user-visible strings. All optional — sensible defaults are used. */
|
|
56
|
+
interface ContentPickerLabels {
|
|
57
|
+
input?: string;
|
|
58
|
+
help?: string;
|
|
59
|
+
empty?: string;
|
|
60
|
+
loading?: string;
|
|
61
|
+
selectedSingular?: string;
|
|
62
|
+
selectedPlural?: string;
|
|
63
|
+
limitReached?: string;
|
|
64
|
+
remove?: string;
|
|
65
|
+
moveUp?: string;
|
|
66
|
+
moveDown?: string;
|
|
67
|
+
dragHandle?: string;
|
|
68
|
+
statusDraft?: string;
|
|
69
|
+
statusPending?: string;
|
|
70
|
+
statusPrivate?: string;
|
|
71
|
+
statusFuture?: string;
|
|
72
|
+
statusTrash?: string;
|
|
73
|
+
missing?: string;
|
|
74
|
+
change?: string;
|
|
75
|
+
openSuggestions?: string;
|
|
76
|
+
closeSuggestions?: string;
|
|
77
|
+
resultsCount?: (n: number) => string;
|
|
78
|
+
}
|
|
79
|
+
interface RequestContext {
|
|
80
|
+
query: string;
|
|
81
|
+
page: number;
|
|
82
|
+
kind: ContentKind;
|
|
83
|
+
}
|
|
84
|
+
interface FilterContext {
|
|
85
|
+
query: string;
|
|
86
|
+
kind: ContentKind;
|
|
87
|
+
}
|
|
88
|
+
interface SuggestionRenderState {
|
|
89
|
+
highlighted: boolean;
|
|
90
|
+
selected: boolean;
|
|
91
|
+
}
|
|
92
|
+
interface ContentPickerProps {
|
|
93
|
+
/** Accessible name for the picker. Required. */
|
|
94
|
+
label: string;
|
|
95
|
+
/** Hide the label visually but keep it for screen readers. */
|
|
96
|
+
hideLabelFromVision?: boolean;
|
|
97
|
+
/** Help text shown under the input. */
|
|
98
|
+
help?: string;
|
|
99
|
+
/** Which entity kind to search. @default 'post' */
|
|
100
|
+
kind?: ContentKind;
|
|
101
|
+
/**
|
|
102
|
+
* Which sub-types to search within the kind.
|
|
103
|
+
* For posts: post type slugs, defaults to `['post', 'page']`.
|
|
104
|
+
* For terms: taxonomy slugs, defaults to `['category', 'post_tag']`.
|
|
105
|
+
* Ignored for users.
|
|
106
|
+
*/
|
|
107
|
+
types?: string[];
|
|
108
|
+
/** Visual variant. @default 'popover' */
|
|
109
|
+
variant?: ContentPickerVariant;
|
|
110
|
+
/** Controlled value. Omit for uncontrolled. */
|
|
111
|
+
value?: ContentItem[];
|
|
112
|
+
/** Uncontrolled initial value. */
|
|
113
|
+
defaultValue?: ContentItem[];
|
|
114
|
+
/** Called with the full new array whenever the selection changes. */
|
|
115
|
+
onChange?: (items: ContentItem[]) => void;
|
|
116
|
+
/** Maximum items the user can pick. `1` = single-select. @default Infinity */
|
|
117
|
+
maxItems?: number;
|
|
118
|
+
/** Allow drag-to-reorder. @default true when maxItems > 1 */
|
|
119
|
+
orderable?: boolean;
|
|
120
|
+
/** Input placeholder text. */
|
|
121
|
+
placeholder?: string;
|
|
122
|
+
/** Items per page from the REST search endpoint. @default 10 */
|
|
123
|
+
perPage?: number;
|
|
124
|
+
/** Debounce between keystrokes and the search request, in ms. @default 250 */
|
|
125
|
+
inputDelayMs?: number;
|
|
126
|
+
/** In `popover` variant, fetch suggestions immediately when the popover opens. */
|
|
127
|
+
fetchOnOpen?: boolean;
|
|
128
|
+
/** Exclude the current post being edited from the results. @default true */
|
|
129
|
+
excludeCurrentPost?: boolean;
|
|
130
|
+
/** Prevent duplicate items in the selection. @default true */
|
|
131
|
+
uniqueItems?: boolean;
|
|
132
|
+
/** Group suggestions by type heading. @default true when types.length > 1 */
|
|
133
|
+
groupByType?: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Hide the `All / Post / Page / …` chip row that normally appears under the
|
|
136
|
+
* search input when the picker is configured with more than one `types` entry.
|
|
137
|
+
* @default false
|
|
138
|
+
*/
|
|
139
|
+
disableTypeFilter?: boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Show each item's URL (slug) beneath the title in the suggestion list.
|
|
142
|
+
* @default true
|
|
143
|
+
*/
|
|
144
|
+
showUrl?: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Show a small "POST" / "PAGE" / "CATEGORY" pill on each selected row.
|
|
147
|
+
* @default true when the picker is configured with more than one `types` entry
|
|
148
|
+
*/
|
|
149
|
+
showTypeBadge?: boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Icon overrides keyed by post-type or taxonomy slug (or `'user'`).
|
|
152
|
+
* By default only users render an icon; all other items render without
|
|
153
|
+
* a leading icon unless they have a featured image thumbnail.
|
|
154
|
+
*/
|
|
155
|
+
icons?: ContentPickerIconMap;
|
|
156
|
+
/**
|
|
157
|
+
* Final filter over the normalized suggestion list, after exclusion and
|
|
158
|
+
* dedupe. Replaces the old `searchResultFilter` / `pickedItemFilter`.
|
|
159
|
+
*/
|
|
160
|
+
filter?: (items: ContentItem[], ctx: FilterContext) => ContentItem[];
|
|
161
|
+
/**
|
|
162
|
+
* Rewrite the REST path before it is fetched. Use to add custom query
|
|
163
|
+
* params (e.g. `_fields`, meta filters). Replaces the old
|
|
164
|
+
* `queryFilter` / `queryFieldsFilter`.
|
|
165
|
+
*/
|
|
166
|
+
request?: (path: string, ctx: RequestContext) => string;
|
|
167
|
+
/** Custom renderer for a suggestion row. */
|
|
168
|
+
renderSuggestion?: (item: ContentItem, state: SuggestionRenderState) => ReactNode;
|
|
169
|
+
/** Custom renderer for a selected-item row. */
|
|
170
|
+
renderSelected?: (item: ResolvedContentItem) => ReactNode;
|
|
171
|
+
/** Custom renderer for a group heading. */
|
|
172
|
+
renderGroupHeading?: (type: string, items: ContentItem[]) => ReactNode;
|
|
173
|
+
/** i18n overrides. */
|
|
174
|
+
labels?: ContentPickerLabels;
|
|
175
|
+
/** Extra class on the root element. */
|
|
176
|
+
className?: string;
|
|
177
|
+
/** Explicit id for the root element; used as prefix for ARIA ids. */
|
|
178
|
+
id?: string;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* `<ContentPicker />` — search for and attach WordPress posts, pages,
|
|
183
|
+
* custom post types, taxonomy terms, or users to a block.
|
|
184
|
+
*
|
|
185
|
+
* The component is **controlled** when `value` is defined, and
|
|
186
|
+
* **uncontrolled** (with optional `defaultValue`) otherwise. In both modes
|
|
187
|
+
* `onChange` fires with the full next array.
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* <ContentPicker
|
|
191
|
+
* label="Related posts"
|
|
192
|
+
* variant="popover"
|
|
193
|
+
* kind="post"
|
|
194
|
+
* types={['post', 'page']}
|
|
195
|
+
* maxItems={5}
|
|
196
|
+
* orderable
|
|
197
|
+
* value={related}
|
|
198
|
+
* onChange={setRelated}
|
|
199
|
+
* />
|
|
200
|
+
*/
|
|
201
|
+
declare const ContentPicker: ({ label, hideLabelFromVision, help, kind, types, variant, value: controlledValue, defaultValue, onChange, maxItems, orderable, placeholder, perPage, inputDelayMs, fetchOnOpen, excludeCurrentPost, uniqueItems, groupByType, showTypeBadge, icons, disableTypeFilter, showUrl, filter, request, renderSuggestion, renderSelected, renderGroupHeading, labels, className, id, }: ContentPickerProps) => react_jsx_runtime.JSX.Element;
|
|
202
|
+
|
|
203
|
+
export { type ContentItem, type ContentKind, ContentPicker, type ContentPickerIcon, type ContentPickerIconMap, type ContentPickerLabels, type ContentPickerProps, type ContentPickerVariant, type ContentStatus, type FilterContext, type MissingReason, type RequestContext, type ResolvedContentItem, type SuggestionRenderState };
|