A React-based UI toolkit for the web
This report summarizes scanner evidence for palantir/blueprint, a TypeScript project with 22,176 GitHub stars. SynthScan examined 202,780 lines of code across 1274 source files, recording 161 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.0 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 113 finding(s).
Are imports declared and package/API names verified? 36 finding(s).
Are wrappers, guards, and repeated structures necessary? 116 finding(s).
Which changes need focused human review? 161 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 161 distinct pattern matches across 6 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .storybook/tokens/preview.tsx | 17 | function captureInitialTokenValues() { | CODE |
| LOW | …kages/docs-app/src/components/copyableImportButton.tsx | 27 | export function addCopyButtonsToImportBlocks() { | CODE |
| LOW | …amples/datetime-examples/datePickerModifierExample.tsx | 22 | export function DatePickerModifierExample(props: ExampleProps) { | CODE |
| LOW | …src/examples/core-examples/toastCreateAsyncExample.tsx | 61 | async function showMessageFromNewToaster() { | CODE |
| LOW | …s/core-examples/button/ButtonDisabledButtonTooltip.tsx | 3 | export default function ButtonDisabledButtonTooltip() { | CODE |
| LOW | …examples/button-group/ButtonGroupIconsWithTooltips.tsx | 3 | export default function ButtonGroupIconsWithTooltips() { | CODE |
| LOW | …e-examples/button-group/ButtonGroupOutlinedMinimal.tsx | 3 | export default function ButtonGroupOutlinedMinimal() { | CODE |
| LOW | packages/test-commons/src/utils.ts | 26 | export function dispatchTestKeyboardEvent(target: EventTarget, eventType: string, key: string, shift = false) { | CODE |
| LOW | packages/core/src/components/portal/portal.tsx | 143 | function addStopPropagationListeners(portalElement: HTMLElement, eventNames?: Array<keyof HTMLElementEventMap>) { | CODE |
| LOW | packages/core/src/components/portal/portal.tsx | 147 | function removeStopPropagationListeners(portalElement: HTMLElement, events?: Array<keyof HTMLElementEventMap>) { | CODE |
| LOW | …ore/src/components/forms/asyncControllableTextArea.tsx | 17 | function AsyncControllableTextArea(props, ref) { | CODE |
| LOW | packages/core/src/components/forms/numericInputUtils.ts | 50 | function transformLocalizedNumberToStringNumber(character: string, locale: string) { | CODE |
| LOW | packages/core/src/components/forms/numericInputUtils.ts | 62 | export function parseStringToStringNumber(value: number | string, locale: string | undefined): string { | CODE |
| LOW | packages/core/src/components/forms/numericInputUtils.ts | 94 | export function isValidNumericKeyboardEvent(e: React.KeyboardEvent, locale: string | undefined) { | CODE |
| LOW | packages/core/src/components/forms/numericInputUtils.ts | 132 | function isFloatingPointNumericCharacter(character: string, locale: string | undefined) { | CODE |
| LOW | packages/core/src/components/forms/numericInputUtils.ts | 166 | function convertFullWidthNumbersToAscii(value: string) { | CODE |
| LOW | …c/components/popover-next/popoverNextMigrationUtils.ts | 42 | export function popperModifiersToNextMiddleware(modifiers: PopperModifierOverrides): MiddlewareConfig { | CODE |
| LOW | …c/components/popover-next/popoverNextMigrationUtils.ts | 237 | export function popperBoundaryToNextBoundary(boundary: PopperBoundary): PopoverNextBoundary { | CODE |
| LOW | …c/components/popover-next/popoverNextMigrationUtils.ts | 255 | export function popoverPlacementToNextPlacement(placement: Placement): PopoverNextPlacement | undefined { | CODE |
| LOW | …c/components/popover-next/popoverNextMigrationUtils.ts | 281 | export function popoverPositionToNextPlacement(position: PopoverPosition): PopoverNextPlacement | undefined { | CODE |
| LOW | …ages/core/src/components/popover-next/floatingUtils.ts | 17 | export function convertMiddlewareConfigToArray(overrides: MiddlewareConfig): Middleware[] { | CODE |
| LOW | packages/core/src/components/slider/multiSlider.tsx | 514 | function getSortedInteractiveHandleProps(props: React.PropsWithChildren<MultiSliderProps>): HandleProps[] { | CODE |
| LOW | …components/context-menu/ContextMenuPopover.stories.tsx | 57 | function ContextMenuPopoverStoryRender(args: ContextMenuPopoverProps) { | CODE |
| LOW | …e/src/components/context-menu/contextMenuSingleton.tsx | 124 | function UncontrolledContextMenuPopover({ onClose, ...props }: Omit<ContextMenuPopoverProps, "isOpen">) { | CODE |
| LOW | …/core/src/components/context-menu/contextMenu.test.tsx | 292 | function TestMenuWithChangingContent({ useAltContent } = { useAltContent: false }) { | CODE |
| LOW | packages/core/src/components/popover/popoverArrow.tsx | 62 | function getArrowReferenceOffsetStyle(placement: Placement) { | CODE |
| LOW | …es/core/src/components/panel-stack/panelStack.test.tsx | 307 | function getFirstPanelCounterValue() { | CODE |
| LOW | packages/core/src/components/overlay2/overlay2.tsx | 752 | function getLifecycleCallbackWithChildRef( | CODE |
| LOW | …ages/core/src/components/overlay2/Overlay2.stories.tsx | 245 | render: function RenderWithoutEnforceFocus(args) { | CODE |
| LOW | packages/core/src/components/overlay2/overlay2.test.tsx | 38 | function renderWithOverlaysProvider(ui: React.ReactElement, renderOptions: RenderOptions = {}): RenderResult { | CODE |
| LOW | …ckages/core/src/components/tag-input/tagInput.test.tsx | 599 | function pressEnterInInputWhenComposing(wrapper: ReactWrapper<any, any>, value: string) { | CODE |
| LOW | …ckages/core/src/components/tag-input/tagInput.test.tsx | 603 | function createInputKeydownEventMetadata(value: string, key: string, isComposing: boolean) { | CODE |
| LOW | packages/core/src/components/overlay/overlayUtils.ts | 25 | export function getKeyboardFocusableElements(container: HTMLElement | React.RefObject<HTMLElement>): HTMLElement[] { | CODE |
| LOW | packages/core/src/components/overlay/overlay.test.tsx | 548 | async function assertBodyScrollingDisabled(disabled: boolean) { | CODE |
| LOW | packages/core/src/common/utils/compareUtils.test.ts | 305 | function getCompareTestDescription(a?: any, b?: any, keys?: any) { | CODE |
| LOW | packages/core/src/common/utils/reactUtils.ts | 47 | export function isReactChildrenElementOrElements( | CODE |
| LOW | …kages/datetime/src/components/date-input/dateInput.tsx | 596 | function getRelatedTargetWithFallback(e: React.FocusEvent<HTMLElement>) { | CODE |
| LOW | …kages/datetime/src/components/date-input/dateInput.tsx | 600 | function getKeyboardFocusableElements(popoverContentRef: React.MutableRefObject<HTMLDivElement | null>) { | CODE |
| LOW | …ponents/date-range-picker/contiguousDayRangePicker.tsx | 112 | function useContiguousCalendarViews( | CODE |
| LOW | …ents/date-range-picker/nonContiguousDayRangePicker.tsx | 135 | function useNonContiguousCalendarViews( | CODE |
| LOW | …ges/datetime/src/components/time-picker/timePicker.tsx | 404 | function getStringValueFromInputEvent(e: React.SyntheticEvent<HTMLInputElement>) { | CODE |
| LOW | …rc/components/date-range-input/dateRangeInput.test.tsx | 235 | function findTimePickerInputElement(className: string, inputElementIndex: number = 0) { | CODE |
| LOW | …rc/components/date-range-input/dateRangeInput.test.tsx | 1441 | function setSelectedRangeForHoverTest(selectedDateConfigs: NullableRange<HoverTextDateConfig>) { | CODE |
| LOW | …rc/components/date-range-input/dateRangeInput.test.tsx | 3190 | function maybeGetDateFnsLocaleOptions(localeCode: string | undefined): { locale: Locale } | undefined { | CODE |
| LOW | packages/datetime/src/common/timezoneUtils.ts | 42 | export function getIsoEquivalentWithUpdatedTimezone( | CODE |
| LOW⚡ | packages/datetime/src/common/timezoneUtils.ts | 62 | export function getDateObjectFromIsoString(value: string | undefined, timezone: string): Date | undefined; | CODE |
| LOW⚡ | packages/datetime/src/common/timezoneUtils.ts | 63 | export function getDateObjectFromIsoString(value: string | null | undefined, timezone: string): Date | null | undefined; | CODE |
| LOW⚡ | packages/datetime/src/common/timezoneUtils.ts | 64 | export function getDateObjectFromIsoString( | CODE |
| LOW | packages/datetime/src/common/timezoneUtils.ts | 93 | export function convertLocalDateToTimezoneTime(date: Date, newTimezone: string) { | CODE |
| LOW | packages/datetime/src/common/timezoneUtils.ts | 107 | export function convertDateToLocalEquivalentOfTimezoneTime(date: Date, newTimezone: string) { | CODE |
| LOW | packages/datetime/src/common/timezoneUtils.test.ts | 33 | function getTimzoneOffsetRelativeToCurrentInHours(tz: string, date: Date): number { | CODE |
| LOW | packages/datetime/src/common/reactDayPickerUtils.ts | 24 | export function dateRangeToDayPickerRange(range: DateRange): RDPRange { | CODE |
| LOW | …kages/datetime/src/common/useMonthSelectRightOffset.ts | 26 | export function useMonthSelectRightOffset( | CODE |
| LOW | packages/table/src/locator.test.tsx | 247 | function runTestSuiteForConvertPointToRowOrColumn( | CODE |
| LOW | packages/table/src/locator.test.tsx | 293 | function getElementMidpointPlusOne(elementIndex: number) { | CODE |
| LOW | packages/table/src/locator.test.tsx | 307 | function assertCellLocatedProperly(clientX: number, clientY: number, expectedRow: number, expectedCol: number) { | CODE |
| LOW | packages/table/src/loadingOptions.test.tsx | 179 | function testLoadingOptionOverrides( | CODE |
| LOW | packages/table/src/tableBody.test.tsx | 113 | function mountTableBodyForRenderModeTest(renderMode: RenderMode.BATCH | RenderMode.NONE) { | CODE |
| LOW | packages/table/src/tableBody.test.tsx | 222 | function mountTableBodyForContextMenuTests( | CODE |
| LOW | packages/table/src/resizeRows.ts | 65 | function resolveResizeRowsByApproximateHeightOptions( | CODE |
| 44 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 230 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 232 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 257 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 259 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 284 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 286 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/labs/src/components/box/boxProps.ts | 311 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/labs/src/components/box/boxProps.ts | 313 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/labs/src/components/box/boxProps.ts | 320 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/labs/src/components/box/boxProps.ts | 322 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 353 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/labs/src/components/box/boxProps.ts | 355 | // ──────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …src/examples/core-examples/divider/DividerVertical.tsx | 6 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin quis aliquam elit. | CODE |
| LOW | …src/examples/core-examples/divider/DividerVertical.tsx | 6 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin quis aliquam elit. | CODE |
| LOW | packages/core/src/components/drawer/drawer.test.tsx | 269 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | packages/core/src/components/drawer/drawer.test.tsx | 269 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | …ckages/core/src/components/forms/FormGroup.stories.tsx | 875 | placeholder="Jane Doe" | CODE |
| LOW | packages/core/src/components/forms/textArea.test.tsx | 47 | const initialValue = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | packages/core/src/components/forms/textArea.test.tsx | 47 | const initialValue = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | packages/core/src/components/forms/textArea.test.tsx | 66 | const nextValue = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | packages/core/src/components/forms/textArea.test.tsx | 66 | const nextValue = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …/core/src/components/popover-next/popoverNext.test.tsx | 1633 | await user.type(input, "lorem ipsum"); | CODE |
| LOW | …/core/src/components/popover-next/popoverNext.test.tsx | 1635 | expect(input).toHaveValue("lorem ipsum"); | CODE |
| LOW | packages/core/src/components/skeleton/_skeleton.scss | 13 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eget tortor felis. | CODE |
| LOW | packages/core/src/components/skeleton/_skeleton.scss | 13 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eget tortor felis. | CODE |
| LOW | …ages/core/src/components/skeleton/Skeleton.stories.tsx | 26 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eget tortor felis. Fusce dapibus metus in | CODE |
| LOW | …ages/core/src/components/skeleton/Skeleton.stories.tsx | 26 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eget tortor felis. Fusce dapibus metus in | CODE |
| LOW⚡ | …ore/src/components/editable-text/editableText.test.tsx | 56 | const { rerender } = render(<EditableText isEditing={false} placeholder="placeholder" value="alphabet" />); | CODE |
| LOW⚡ | …ore/src/components/editable-text/editableText.test.tsx | 58 | rerender(<EditableText isEditing={false} placeholder="placeholder" value={undefined} />); | CODE |
| LOW⚡ | …ore/src/components/editable-text/editableText.test.tsx | 59 | expect(screen.queryByText("placeholder")).toBeInTheDocument(); | CODE |
| LOW | …ore/src/components/editable-text/editableText.test.tsx | 222 | <EditableText isEditing={true} defaultValue="default" placeholder="placeholder" />, | CODE |
| LOW | packages/core/src/components/dialog/dialog.test.tsx | 242 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | packages/core/src/components/dialog/dialog.test.tsx | 242 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 448 | describe("placeholder", () => { | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 451 | assert.strictEqual(wrapper.find("input").prop("placeholder"), "hold the door", "empty array"); | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 453 | assert.strictEqual(wrapper.find("input").prop("placeholder"), "hold the door", "[undefined]"); | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 455 | assert.isUndefined(wrapper.find("input").prop("placeholder"), "normal values"); | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 460 | assert.strictEqual(wrapper.find("input").prop("placeholder"), "hold the door"); | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 462 | assert.strictEqual(wrapper.find("input").prop("placeholder"), "hold the door"); | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 469 | assert.strictEqual(wrapper.find("input").prop("placeholder"), "props"); | CODE |
| LOW⚡ | …ckages/core/src/components/tag-input/tagInput.test.tsx | 471 | assert.strictEqual(wrapper.find("input").prop("placeholder"), "inputProps"); | CODE |
| LOW | …rc/components/date-range-input/dateRangeInput.test.tsx | 3102 | return input.prop("placeholder"); | CODE |
| LOW | packages/icons/icons-next.json | 2044 | "tags": ["empty", "placeholder", "nothing"] | CODE |
| LOW | packages/icons/icons-next.json | 3770 | "placeholder", | CODE |
| LOW | packages/icons/icons-next.json | 13426 | "placeholder", | CODE |
| LOW | packages/demo-app/src/examples/DialogExample.tsx | 39 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | packages/demo-app/src/examples/DialogExample.tsx | 39 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore | CODE |
| LOW | packages/table-dev-app/src/features.tsx | 551 | <p>Whatever interactive header content goes here lorem ipsum.</p> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .palantir/autorelease.yml | 41 | # | COMMENT |
| LOW | packages/core/src/components/popover-next/usePopover.ts | 101 | // call `preventDefault()` on the Space keydown event to prevent page scrolling. | COMMENT |
| LOW | packages/core/src/components/toast/overlayToaster.tsx | 101 | } catch (error) { | COMMENT |
| LOW | packages/core/src/common/_variables.scss | 1 | // Copyright 2015 Palantir Technologies, Inc. All rights reserved. | COMMENT |
| LOW | packages/table/src/selection.test.tsx | 201 | // TODO fix these tests on CircleCI. | COMMENT |
| LOW | packages/table/src/table.test.tsx | 1641 | } | COMMENT |
| LOW | packages/table/src/table.test.tsx | 1661 | // numRows={DEFAULT_NUM_ROWS} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/select/src/components/suggest/suggest.tsx | 291 | // TODO can we leverage Popover.openOnTargetFocus for this? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/core/src/_typography.scss | 341 | .#{$ns}-list-unstyled - Remove all list styling (including indicators) so you can add your own. | CODE |