更新日志
@lark-ui/core
3.0.2修订版

修订内容

  • 6fc23b4

    Validate npm trusted publishing from GitHub Actions

    No runtime changes. This release exercises the trusted-publishing (OIDC) release path so the Trusted Publisher configuration is bound to the repository.

3.0.1修订版

修订内容

  • 716ce1b

    Make the Cloudflare account configurable, and publish through the npm CLI

    The account ID in cloudflare.config.ts was inherited from the upstream project and pointed at someone else's Cloudflare account. It now reads CLOUDFLARE_ACCOUNT_ID from the environment, falling back to the previous value.

    The release flow has moved to the npm CLI (pnpm release:npm). The npm CLI is the only client that implements npm's trusted publishing (OIDC), so CI can publish with the job's OIDC token once a Trusted Publisher is configured on npmjs.com for the package — no long-lived NPM_TOKEN secret.

  • 2e35bc6

    Serve the docs from lark-ui.tapeless.eu.org, and restore the icon prop to the registry

    • The documentation links in the package and the docs site now point at lark-ui.tapeless.eu.org.
    • Badge.icon and Button.icon are back in the component registry. The Icon | ReactNode prop type is not representable as a JSON schema, so the generator dropped the whole prop; they are now injected through ADDITIONAL_COMPONENT_PROPS like the other manual overrides. The registry cache version was bumped so the change takes effect without --no-cache.
    • Banner.theme's description no longer names the internal class it was modelled on.
3.0.0修订版

修订内容

  • 0613f69

    Round the dot in the middle of a checked radio

    The indicator element carried the dot's white fill but had no border radius, so it painted a white 6×6 square around the round dot sitting inside it. The indicator is now rounded-full, matching Feishu's circular dot.

    • Lighten the segmented Tabs track

      The segmented variant painted its track background twice: an absolutely positioned track element and the tab list each carried bg-lark-tag-neutral-bg, so the two translucent layers stacked into ~19% black and the unselected part of the track came out as #cbcece over the #f5f6f7 canvas.

      The redundant track element is gone and the tab list now carries the background on its own, using bg-lark-control (#eff0f1 light / #262626 dark) — the same token the segmented Radio group uses. The overflow scroll-fade gradient now uses lark-control too, so it no longer leaves a seam against the track.

2.17.0次版本

次要变更

  • c2b2fc4

    Add a masked option to ClipboardText for sensitive values that should be hidden initially and revealed on demand.

  • 7d1c776

    Refresh DatePicker's styling. Days are 32px squares in 36px columns with 8px between weeks and 14px text, and the previous and next buttons are borderless squares that match the days. Two-month views sit side by side, range bands are rounded at their ends and where weeks wrap, and month and year dropdowns (captionLayout="dropdown") are styled.

    DatePicker now uses Lark tokens instead of hard-coded colors, so it follows the active theme, and @lark-ui/core/styles/standalone now styles it too. Month-change animations respect prefers-reduced-motion.

    The .rdp-* rules and --rdp-* variables in lark.css are gone, apart from the month-change animations. If you customized DatePicker through them, use the classNames prop instead.

  • 40eaa25

    Fix the toast bump animation cutting off a toast's slide-in when the same id is added again while the toast is still entering. Duplicate adds through createLarkToastManager() now bump too, and toast motion respects prefers-reduced-motion. Toast surface styles now live on an inner [data-lark-part="surface"] element instead of the role="dialog" root.

修订内容

  • 06726b0

    Field no longer renders a <label> when it would be empty: when label and labelTooltip are each undefined, null, a boolean or "", and there is no "(optional)" indicator. This fixes Input, InputArea and TagInput without a label but with a description or error: they no longer show an empty row above the control, and their aria-label is no longer replaced by an empty accessible name.

  • 595463b

    Format generated primitive and theme files with Oxfmt so codegen does not create formatting-only changes.

  • 3aa0d59

    Hide the native scrollbars of the LayerDialog body and Sidebar content with Lark's own CSS. Base UI only hides them with a style element it injects into the document head, so client routers that swap the head (such as Astro's ClientRouter) or a Content Security Policy that blocks inline styles could leave empty scrollbar tracks along the dialog body.

  • 890a6ab

    Add a full-width LayerDialog.Separator for dividing sections of dialog body content.

  • 4185bb1

    Tooltip now keeps its own trigger out of the tab order while the tooltip is disabled. This applies only when Lark renders the trigger (no render or asChild), for example around truncated Text that needs a tooltip only when it overflows. A disabled tooltip there has nothing to reveal, so keyboard users no longer stop on it. Custom triggers passed through render keep their own focus behavior.

2.16.0次版本

次要变更

  • 810d820

    Add the xAxisHideLabelOverlap prop to TimeseriesChart, defaulting to true.

修订内容

  • 99b17fb

    Match CodeHighlighted loading and error fallback styling to highlighted code. Reset host app backgrounds, borders, and pre border radii to keep the frame and spacing consistent while syntax colors load.

  • 6a093a5

    Fix disabled Input text color. It used an undefined text-lark-disabled token, so disabled inputs looked the same as enabled ones. It now uses text-lark-inactive.

  • e16f41f

    Fix Pagination page validation. The page input only accepts whole numbers written as digits, so it no longer calls setPage with NaN, fractions, or values like 0x10 and 1e1. Invalid input now restores the current page. With totalCount={0}, or when page is past the last page, Next and Last are disabled and nothing requests page 0.

  • fedc8a7

    Fix three TagInput bugs:

    • readOnly now prevents all value changes. Tags can no longer be removed with their remove buttons or Backspace, and new tags can't be added by typing, pasting, or blurring.
    • Pasting comma- or newline-separated text now merges it with the draft text and replaces the current selection before splitting it into tags. Previously, text you were already typing was lost.
    • Native forms now submit the accepted tags. With name, each tag is submitted as its own form value, so the empty draft is no longer sent. With required, validation passes as soon as there is at least one tag.
  • 947065a

    Fix TimeseriesChart crashing with RangeError: Maximum call stack size exceeded on large datasets. Marker clustering no longer spreads every timestamp into Math.max/Math.min, and is skipped entirely when the chart has no markers.

2.15.0次版本

次要变更

  • 88850d5

    Add tooltipTimestampFormat to TimeseriesChart for formatting standard and marker tooltip timestamps in a consumer-selected time zone.

  • 5282710

    Add a segmented appearance to Radio groups for compact, mutually exclusive choices.

  • 3d93312

    Add appearance="card" and orientation to Checkbox.Group, plus appearance and description to Checkbox.Item. Card groups render as one card with dividers (rows when vertical, a two-column grid when horizontal), matching Radio.Group's card appearance.

  • 1846759

    DropdownMenu submenu and row improvements:

    • An open submenu's trigger stays highlighted (data-popup-open).
    • Every menu row (Item, LinkItem, SubTrigger, CheckboxItem, RadioItem) uses the same bg-lark-tint highlight and rounded-md radius.
    • Submenus line up with their trigger by default. SubContent's default sideOffset and alignOffset depend on the resolved side, so they stay correct if the submenu has to move above or below the trigger.
    • The menu popup now animates with Base UI's data-starting-style / data-ending-style (the old data-[state=*] classes never matched).
    • New DropdownMenu.Positioner and DropdownMenu.Popup parts. Content and SubContent are built from them, and you can compose them yourself. DropdownMenu.Portal now respects LarkPortalProvider.
    • SubTrigger's icon prop accepts Icon | ReactNode.
    • Icons are spaced by the row's gap-2, so element and component icons line up identically.
    • Rows without an icon (including labels) are inset automatically when another row in the same menu has an icon, so their text lines up. inset still forces it.
  • 81b0ef4

    Add Base UI-style composable Popover parts while preserving the legacy Popover.Content API.

  • 49317c6

    Render Radio.Group cards as one card with dividers (rows when vertical, a two-column grid when horizontal), give card radio controls a 1px ring, and tighten card groups' legend and description gaps to match Field.

  • 1cb4773

    Allow translating optional markers and label tooltip accessible names with LarkLocaleProvider, with Label-level overrides for custom content.

  • 85afbd0

    Add Slider component for picking a number, or a range between two numbers, by dragging a thumb along a track. Built on Base UI's Slider: pass an array to value or defaultValue for a range. Shows each thumb's value in a badge below the track and the minimum and maximum at either end, formats them with format, and supports sm and base sizes.

  • 2f9b17f

    Allow LayerDialog actions to use a ButtonGroup split button for related alternate submit outcomes.

修订内容

  • 2c53422

    Fix Autocomplete highlighted item background to use bg-lark-tint, matching Combobox and Select.

  • 09a9dae

    Apply dropdown icon spacing and sizing to element icons while preserving their custom classes.

  • df14b5d

    Bump @base-ui/react to 1.9.0. Brings Base UI bug fixes across Menu, Popover, Select, Combobox, Drawer, Dialog, and more, plus the preview menu filtering primitives (Menu.FilterProvider, Menu.Input) via @lark-ui/core/primitives/menu.

  • cdb7e0f

    Button and LinkButton: optically center text by lifting it slightly, and trim the leading padding when an icon precedes text so the icon side matches the trailing padding.

  • dc7c513

    Stop throwing on malformed URL hashes while syncing table-of-contents sections. Hashes that can't be percent-decoded are matched as-is, so ids containing a literal % still deep-link.

  • f7d6829

    Keep Popover arrows visible when content clips or scrolls by using a compatibility-safe opacity transition.

  • 03aa5ae

    Remove unused Tabs indicator entrance animation styles.

  • dae9cdd

    Keep transient copy feedback visible until the final repeated copy click settles across Lark copy controls.

  • 7e0ff40

    Fix Flow connectors bending when nodes have a top margin by aligning connector offsets with their anchors.

  • a8c946a

    Match a linkable Badge's focus outline to its pill shape.

  • c3b0294

    Replace the internal class merging dependency with cn.

  • 86af1a1

    Stop LayerDialog.Body from clipping the top of its first child. The body now has a little top padding so a leading input's border and focus ring stay visible, and the top scroll fade no longer masks content in Safari before the scroll area is measured.

  • d97d751

    Restore LayerDialog.Actions.Primary and LayerDialogPrimaryProps as deprecated aliases of LayerDialog.Action and LayerDialogActionProps, so dialogs written against 2.14 keep working.

  • bfb4140

    Fix Loader crashing with can't access property "height" in browsers with SVG disabled (e.g. Tor Browser at the "Safest" security level). The spinner is now sized via width/height SVG attributes instead of an inline style. Note that sizing classes passed via className (e.g. size-4) now take precedence over the size prop.

  • aef723c

    Hide outside-month dates by default in multi-month DatePicker views so dates and range highlights are not duplicated between panels. Preserve single-month behavior and explicit showOutsideDays overrides.

  • 6701f40

    Fire Sidebar.Collapsible onOpenChangeComplete when the sidebar or mobile drawer shows or hides an open section. Before, the callback fired only when the section itself toggled.

  • 462516f

    Stop logging runtime warnings for deprecated Text heading variants. The variants remain marked as deprecated in the TypeScript API.

  • 17d094e

    Render the Sidebar.MenuSub guide line as an aria-hidden list item so the sub-menu list only contains <li> children.

  • 543dc8a

    Slider: render the current value badge in the high-contrast (black) color instead of the brand blue, with a subtle grey fill when disabled. The filled track is now lighter in dark mode so it stands out from the background.

  • 72b3346

    Fix Flow nodes with a custom render element briefly laying out at the wrong position on mount. Unpositioned nodes are now measured as absolutely positioned elements, so their first reported width matches their final width.

  • 5ee4a03

    TagInput: ignore Enter, comma and Tab while an IME composition is active, so confirming a Japanese/Chinese/Korean conversion no longer creates a tag early.

  • 7d91721

    Preserve ButtonGroup's outer corners while an overlay control is open.

  • 828866a

    Prevent Select separators from causing a horizontal scrollbar.

  • f46e8bc

    Update the Cloudflare logo cloud colors to match the current brand asset.

2.14.0次版本

次要变更

  • da41be5

    Update the bundled Base UI dependency to version 1.8.0 and expose its Combobox item collection and functional Toast update APIs.

  • 9ad4c57

    Add ButtonGroup component for joining a small set of tightly-coupled buttons into a single control — most commonly a split button (a primary action next to a dropdown trigger). Handles layout only: children keep their own variant, size, and shape while the group flattens inner corners and overlaps borders so the buttons share one seam. Renders role="group". For grouping multiple independent buttons or inputs, use Toolbar instead.

  • d0b18d6

    Add sidebar open-change completion callbacks.

  • cd119ab

    Add the TagInput component for creating and removing free-form values.

  • 5d19dee

    Add InlineCopyText, a compact borderless copy control for short values in dense interfaces and table cells. It accepts string or rich children, Text typography props excluding heading variants, an explicit copied value for rich content, localized accessible labels, inline success feedback, and hover or focus icon reveal.

  • 77489b5

    Add an optional yAxisMinInterval prop to TimeseriesChart for discrete data.

  • 6989681

    Add support for footer text below TimeseriesChart tooltip values.

  • 06321ce

    Add a strict responsive LayerDialog component with automatic dismissal composition, alert-dialog semantics, mobile drawer behavior, and application-wide defaults for its built-in close and cancel copy through LarkLocaleProvider.

  • d4a3e71

    Add GlobeMap, an SVG orthographic globe with boundary-free hatched land, horizon-faded geographic markers, optional geographic guides, pointer and keyboard rotation, automatic rotation, Lark-themed tooltips, and no WebGL or ECharts requirement.

修订内容

  • de80043

    Reset the native fieldset padding in radio and checkbox groups.

  • 1175556

    Refine Empty state typography and balance description text when it wraps.

  • 5b1e222

    Support nested LayerDialog drawers with independently layered backdrops and responsive mobile actions.

  • 9c970e3

    Add a plain CodeHighlighted variant for frameless, padding-free code blocks with a correctly positioned copy button.

  • cfffa4e

    Document app-root CSS isolation for reliable stacking of portaled components.

  • 6e7bd82

    Update formatting for Vite+ 0.3.1.

  • 78d05b6

    Use the up/down double chevron in Combobox value and input triggers to match Select.

  • 86029e4

    Add a visual regression contract for truncating text in default Tooltip triggers.

2.13.2修订版

修订内容

  • 36fc155

    Add scrollItemIntoView() to preserve the position of visible sidebar items while honoring alignment for offscreen items.

2.13.1修订版

修订内容

  • 7d5241d

    Allow default Tooltip trigger children to control their line height, preventing inherited text from being clipped.

2.13.0次版本

次要变更

  • 4066307

    Add unknown-total pagination support through hasNextPage.

  • f74936f

    Add Toolbar.Link, which renders a LinkButton with toolbar sizing, styling, and keyboard navigation.

修订内容

  • d004940

    Position dialogs near the top of the viewport instead of vertically centering them.

  • 8f0a1f0

    Use the elevated surface color for even rows in the default Table variant.

  • 1ede8bf

    fix(select): align the trigger surface with form controls

    Select triggers now use bg-lark-control, including their open and disabled states, so they match Input, Combobox, and the rest of the form-control family. Consumer background classes can still override the default without using !important. The popup remains on the floating bg-lark-base surface.

  • 8482c50

    fix(select): anchor the popup below the trigger and expose placement props

    Select.Positioner relied on Base UI's alignItemWithTrigger default (true), which overlays the popup on the trigger so the selected option's text lands on the trigger's value text, emulating a native <select>. Options always render at text-base, so on xs/sm triggers the popup was much taller than its anchor, and Base UI's compensating shift detached it from the trigger — on xs it overhung by 12.5px above and 45.5px below and sat 8px to the left, covering adjacent content.

    The popup now prefers bottom placement and is offset from the trigger, with Base UI's collision avoidance still flipping it automatically when the preferred side lacks space. Placement is configurable:

    propdefaultnotes
    side"bottom"preferred side; still flips automatically on collision
    sideOffset4gap between trigger and popup, matching Combobox/Autocomplete
    align"start"alignment along the trigger edge
    alignOffset—additional offset along the alignment axis
    alignItemWithTriggerfalseopt back in to the native <select> overlay

    The remaining Base UI Positioner controls are also forwarded unchanged: anchor, arrowPadding, positionMethod, collisionAvoidance, collisionBoundary, collisionPadding, sticky, and disableAnchorTracking.

    The popup also now tracks the trigger width via min-w-(--anchor-width) instead of min-w-[calc(var(--anchor-width)+3px)], which existed to visually offset the old item-alignment shift.

  • 7526a6a

    Allow non-heading Text variants to inherit line height from their surrounding context.

  • b094a5a

    Make Combobox.Input sit flush with the top and sides of Combobox.Content and remove its bottom corner rounding.

  • 20b7880

    Reduce the trailing inset for buttons inside large InputGroup addons.

Showing 1-10 of 66