@mediaradar/design-components 0.18.5 → 0.18.7

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/dist/index.d.cts CHANGED
@@ -56,7 +56,7 @@ declare function InfoTip({ text, size, label, trigger }: InfoTipProps): react.JS
56
56
  * original (and still primary) use, but the copy props make it reusable for
57
57
  * any dimension that's also search-first in its own filter tray, so the
58
58
  * dimension reads the same in the quick bar as it does there.
59
- * @tokens rounded-control, rounded-card, border-border-default, border-border-strong,
59
+ * @tokens text-control-caption, rounded-control, rounded-card, border-border-default, border-border-strong,
60
60
  * border-border-interactive, border-border-focus, bg-surface, bg-input,
61
61
  * shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary,
62
62
  * text-text-link, bg-brand-primaryAction, text-brand-onprimary,
@@ -408,7 +408,7 @@ declare function CheckBoxBox({ checked, indeterminate, disabled, className }: Ch
408
408
  * a chevron that opens a two-pane picker: preset shortcuts on the left, a
409
409
  * dual-month calendar with range highlighting on the right, Start/End fields,
410
410
  * and Cancel/Apply. Shared by Creative Intel and the Account Review.
411
- * @tokens rounded-control, rounded-card, border-border-default, border-border-strong,
411
+ * @tokens text-control-caption, rounded-control, rounded-card, border-border-default, border-border-strong,
412
412
  * bg-surface, bg-input, bg-subtle, bg-ai-tint, bg-brand-primaryAction, text-brand-onprimary,
413
413
  * shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary,
414
414
  * hover:bg-subtle, hover:text-text-primary, focus-visible:outline-border-focus
@@ -473,7 +473,7 @@ declare function DateRangeFilter({ caption, defaultValue, value: controlledValue
473
473
  * bordered control, mirroring the legacy Creative Intel search + match-type
474
474
  * modal (Any Word/Exact Match/Contextual/Ad Code), including the Or/And
475
475
  * sub-choice nested under Any Word.
476
- * @tokens rounded-control, border-border-strong, bg-input, text-text-primary,
476
+ * @tokens text-badge, rounded-control, border-border-strong, bg-input, text-text-primary,
477
477
  * text-text-tertiary, hover:bg-subtle, bg-brand-primaryAction, bg-subtle,
478
478
  * bg-surface, border-brand-primaryAction, border-border-default,
479
479
  * border-border-interactive, focus-visible:outline-border-focus,
@@ -592,7 +592,7 @@ declare function SectionRail({ title, titleSerif, subtitle, viewAllLabel, viewAl
592
592
  * formats, for stable report-ready numbers). One boolean, one control,
593
593
  * shared across every dashboard that has this data-finality concept
594
594
  * (Publisher Intel, Opportunities, Sports).
595
- * @tokens rounded-control, border-border-strong, bg-input, hover:bg-subtle,
595
+ * @tokens text-control-caption, rounded-control, border-border-strong, bg-input, hover:bg-subtle,
596
596
  * hover:text-text-primary, focus-visible:outline-border-focus, rounded-card,
597
597
  * border-border-default, bg-surface, shadow-overlay, text-text-primary,
598
598
  * text-text-secondary, text-text-tertiary, text-brand-primaryAction
@@ -630,7 +630,7 @@ declare function DataScopeFilter({ value, onChange, align }: DataScopeFilterProp
630
630
  * `document.body` so the popover is never clipped by a scrollable ancestor
631
631
  * (e.g. inside a modal) -- unlike this package's other chip popovers, none
632
632
  * of which are known to sit inside a clipping container today.
633
- * @tokens rounded-control, rounded-card, border-border-default,
633
+ * @tokens text-control-caption, rounded-control, rounded-card, border-border-default,
634
634
  * border-border-strong, bg-input, bg-surface, shadow-overlay,
635
635
  * text-text-primary, text-text-secondary,
636
636
  * text-text-tertiary, hover:bg-subtle, hover:text-text-primary,
@@ -1376,7 +1376,7 @@ interface SelectionPickerProps<T extends PickerRow> {
1376
1376
  * filtered client-side (the default), or externally-computed `results` for a
1377
1377
  * caller whose search is server-side/async, with `loading`/`error`/
1378
1378
  * `hasMore`/`onLoadMore` covering that mode's states.
1379
- * @tokens rounded-control, rounded-card, border-border-default, bg-input,
1379
+ * @tokens border-border-strong, rounded-control, rounded-card, border-border-default, bg-input,
1380
1380
  * bg-canvas, bg-surface, shadow-raised, shadow-overlay, text-text-primary,
1381
1381
  * text-text-secondary, text-text-tertiary, text-text-link,
1382
1382
  * text-brand-primaryAction, border-brand-primaryAction, bg-brand-primaryAction,
@@ -1466,7 +1466,7 @@ interface PublisherBreakdownListProps {
1466
1466
  * @tokens text-text-primary, text-text-tertiary, text-text-secondary,
1467
1467
  * text-text-link, text-text-warning, text-text-success, text-text-danger,
1468
1468
  * border-border-default, bg-surface, bg-subtle, rounded-control, rounded-full,
1469
- * shadow-overlay, text-micro
1469
+ * shadow-overlay, text-badge
1470
1470
  * @behavior Truncates to `defaultVisibleCount` rows with a "See all (N more)"
1471
1471
  * / "Show less" toggle, unless `viewAllHref` is given, in which case the
1472
1472
  * footer becomes a plain link out instead (e.g. to a full breakdown page).
@@ -1646,7 +1646,7 @@ interface NameListModalProps {
1646
1646
  * checkboxes under it. Shared by the Account Lists table and the list detail
1647
1647
  * page so create/rename look identical; `fieldLabel`/`placeholder` relabel it
1648
1648
  * for dialogs that name something other than a list.
1649
- * @tokens bg-scrim, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, rounded-control, bg-input, focus:border-brand-primaryAction
1649
+ * @tokens border-border-strong, bg-scrim, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, rounded-control, bg-input, focus:border-brand-primaryAction
1650
1650
  * @behavior Escape closes the dialog via `onCancel`, same as clicking the
1651
1651
  * scrim backdrop. Submit is disabled until the name is non-empty (trimmed).
1652
1652
  * When `options` are given they render as CheckBox rows below the field, and
@@ -1664,15 +1664,14 @@ interface NameListModalProps {
1664
1664
  declare function NameListModal({ title, initialName, submitLabel, onCancel, onSubmit, fieldLabel, placeholder, options, }: NameListModalProps): react.ReactPortal;
1665
1665
 
1666
1666
  /**
1667
- * Which stroke a chip trigger carries.
1668
- * - `box` : the boxed two-line chip (caption over value), on the default
1669
- * border. The common filter-bar chip.
1670
- * - `inline` : the same white fill with a darker stroke, for chips sitting
1671
- * directly on the warm canvas with no boxed shell around them.
1667
+ * Kept for compatibility. Since 0.18.5 both variants draw the same
1668
+ * `border-strong` stroke, matching SelectFilter, DateRangeFilter,
1669
+ * DataScopeFilter, AdvertiserQuickFilter and SearchBar, so every dropdown
1670
+ * trigger in a filter row has one border colour.
1672
1671
  */
1673
1672
  type ChipVariant = "box" | "inline";
1674
1673
  /** Shared styling for filter-bar chip triggers, so every dropdown chip matches. */
1675
- declare function chipTriggerClass(variant?: ChipVariant): string;
1674
+ declare function chipTriggerClass(_variant?: ChipVariant): string;
1676
1675
  interface ChipContentProps {
1677
1676
  /** Small uppercase label above the value. */
1678
1677
  caption: string;
@@ -1686,11 +1685,10 @@ interface ChipContentProps {
1686
1685
  * @description Shared foundation for filter-bar chip triggers — pairs
1687
1686
  * `chipTriggerClass` with `ChipContent` for the caption/value/icon layout, so
1688
1687
  * every dropdown chip across the app matches.
1689
- * @tokens rounded-control, bg-input, border-border-default, border-border-strong, text-text-secondary, text-text-tertiary, text-text-primary, hover:bg-subtle, focus-visible:outline-border-focus, hover:text-text-primary
1690
- * @behavior `chipTriggerClass` takes a `ChipVariant`: `box` (default, the
1691
- * boxed two-line chip on the default border) or `inline` (same fill, darker
1692
- * stroke, for chips sitting directly on the canvas). It is an argument to
1693
- * that function, not a prop on `ChipContent`.
1688
+ * @tokens text-control-caption, rounded-control, bg-input, border-border-strong, text-text-secondary, text-text-tertiary, text-text-primary, hover:bg-subtle, focus-visible:outline-border-focus, hover:text-text-primary
1689
+ * @behavior `chipTriggerClass` still accepts a `ChipVariant` (`box` or
1690
+ * `inline`) so existing calls compile, but both draw the same `border-strong`
1691
+ * stroke as every other dropdown trigger.
1694
1692
  * Provides only the shared `focus-visible:outline-2` keyboard-focus
1695
1693
  * treatment every dropdown trigger depends on — open/close, Escape, and
1696
1694
  * outside-click dismissal all live in each consumer, not here. A new dropdown
@@ -1856,9 +1854,11 @@ declare const SIZES$1: {
1856
1854
  /** Matches a 15px lucide icon exactly, so a workspace name in a menu row
1857
1855
  * left-aligns with labels in icon-led rows above and below it. */
1858
1856
  readonly xs: "h-[15px] w-[15px] rounded-[4px] text-[8px] tracking-tight";
1857
+ /** 10px, not text-control-caption: that step is for dropdown captions.
1858
+ * Two initials need to sit inside the 24px circle, a step below md. */
1859
1859
  readonly sm: "h-6 w-6 text-[10px]";
1860
- readonly md: "h-7 w-7 text-[11px]";
1861
- readonly lg: "h-11 w-11 text-[15px]";
1860
+ readonly md: "h-7 w-7 text-micro";
1861
+ readonly lg: "h-11 w-11 text-panel-title";
1862
1862
  };
1863
1863
  interface WorkspaceAvatarProps {
1864
1864
  /** Omit for the unscoped "All data workspace". */
@@ -1919,7 +1919,7 @@ declare function Tag({ children, className }: TagProps): react.JSX.Element;
1919
1919
  * first/prev/pages/next/last pager, and the resolved "1 – 25 of N results"
1920
1920
  * range. Owns no state — the host page holds `page` and `perPage` so the
1921
1921
  * paged slice and the bar can't disagree.
1922
- * @tokens rounded-control, border-border-default, bg-input, text-text-primary, text-text-secondary, text-text-tertiary, bg-brand-primaryAction, text-brand-onprimary, hover:bg-subtle, hover:text-text-primary, focus:outline-border-focus
1922
+ * @tokens border-border-strong, rounded-control, bg-input, text-text-primary, text-text-secondary, text-text-tertiary, bg-brand-primaryAction, text-brand-onprimary, hover:bg-subtle, hover:text-text-primary, focus:outline-border-focus
1923
1923
  * @behavior The current page is filled with the brand action color (matching
1924
1924
  * the Contacts pager). First/prev disable on page 1, next/last on the last
1925
1925
  * page — disabled controls stay in the layout so the row never reflows.
@@ -2005,7 +2005,7 @@ interface MultiSelectGroup {
2005
2005
  * button shape (two-line caption + value with a chevron) and opens a
2006
2006
  * searchable checkbox popover. Used for the page-level Media Type /
2007
2007
  * Advertiser filters that share state with the filter tray.
2008
- * @tokens rounded-control, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary, text-text-link, border-border-interactive, bg-brand-primaryAction, bg-input, hover:bg-subtle, hover:text-text-primary, placeholder:text-text-tertiary, text-brand-onprimary
2008
+ * @tokens border-border-strong, rounded-control, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary, text-text-link, border-border-interactive, bg-brand-primaryAction, bg-input, hover:bg-subtle, hover:text-text-primary, placeholder:text-text-tertiary, text-brand-onprimary
2009
2009
  * @dependencies lucide-react
2010
2010
  * @behavior `variant` picks the trigger's chip stroke: `box` (default, the
2011
2011
  * boxed two-line chip on the default border) or `inline` (same fill,
package/dist/index.d.ts CHANGED
@@ -56,7 +56,7 @@ declare function InfoTip({ text, size, label, trigger }: InfoTipProps): react.JS
56
56
  * original (and still primary) use, but the copy props make it reusable for
57
57
  * any dimension that's also search-first in its own filter tray, so the
58
58
  * dimension reads the same in the quick bar as it does there.
59
- * @tokens rounded-control, rounded-card, border-border-default, border-border-strong,
59
+ * @tokens text-control-caption, rounded-control, rounded-card, border-border-default, border-border-strong,
60
60
  * border-border-interactive, border-border-focus, bg-surface, bg-input,
61
61
  * shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary,
62
62
  * text-text-link, bg-brand-primaryAction, text-brand-onprimary,
@@ -408,7 +408,7 @@ declare function CheckBoxBox({ checked, indeterminate, disabled, className }: Ch
408
408
  * a chevron that opens a two-pane picker: preset shortcuts on the left, a
409
409
  * dual-month calendar with range highlighting on the right, Start/End fields,
410
410
  * and Cancel/Apply. Shared by Creative Intel and the Account Review.
411
- * @tokens rounded-control, rounded-card, border-border-default, border-border-strong,
411
+ * @tokens text-control-caption, rounded-control, rounded-card, border-border-default, border-border-strong,
412
412
  * bg-surface, bg-input, bg-subtle, bg-ai-tint, bg-brand-primaryAction, text-brand-onprimary,
413
413
  * shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary,
414
414
  * hover:bg-subtle, hover:text-text-primary, focus-visible:outline-border-focus
@@ -473,7 +473,7 @@ declare function DateRangeFilter({ caption, defaultValue, value: controlledValue
473
473
  * bordered control, mirroring the legacy Creative Intel search + match-type
474
474
  * modal (Any Word/Exact Match/Contextual/Ad Code), including the Or/And
475
475
  * sub-choice nested under Any Word.
476
- * @tokens rounded-control, border-border-strong, bg-input, text-text-primary,
476
+ * @tokens text-badge, rounded-control, border-border-strong, bg-input, text-text-primary,
477
477
  * text-text-tertiary, hover:bg-subtle, bg-brand-primaryAction, bg-subtle,
478
478
  * bg-surface, border-brand-primaryAction, border-border-default,
479
479
  * border-border-interactive, focus-visible:outline-border-focus,
@@ -592,7 +592,7 @@ declare function SectionRail({ title, titleSerif, subtitle, viewAllLabel, viewAl
592
592
  * formats, for stable report-ready numbers). One boolean, one control,
593
593
  * shared across every dashboard that has this data-finality concept
594
594
  * (Publisher Intel, Opportunities, Sports).
595
- * @tokens rounded-control, border-border-strong, bg-input, hover:bg-subtle,
595
+ * @tokens text-control-caption, rounded-control, border-border-strong, bg-input, hover:bg-subtle,
596
596
  * hover:text-text-primary, focus-visible:outline-border-focus, rounded-card,
597
597
  * border-border-default, bg-surface, shadow-overlay, text-text-primary,
598
598
  * text-text-secondary, text-text-tertiary, text-brand-primaryAction
@@ -630,7 +630,7 @@ declare function DataScopeFilter({ value, onChange, align }: DataScopeFilterProp
630
630
  * `document.body` so the popover is never clipped by a scrollable ancestor
631
631
  * (e.g. inside a modal) -- unlike this package's other chip popovers, none
632
632
  * of which are known to sit inside a clipping container today.
633
- * @tokens rounded-control, rounded-card, border-border-default,
633
+ * @tokens text-control-caption, rounded-control, rounded-card, border-border-default,
634
634
  * border-border-strong, bg-input, bg-surface, shadow-overlay,
635
635
  * text-text-primary, text-text-secondary,
636
636
  * text-text-tertiary, hover:bg-subtle, hover:text-text-primary,
@@ -1376,7 +1376,7 @@ interface SelectionPickerProps<T extends PickerRow> {
1376
1376
  * filtered client-side (the default), or externally-computed `results` for a
1377
1377
  * caller whose search is server-side/async, with `loading`/`error`/
1378
1378
  * `hasMore`/`onLoadMore` covering that mode's states.
1379
- * @tokens rounded-control, rounded-card, border-border-default, bg-input,
1379
+ * @tokens border-border-strong, rounded-control, rounded-card, border-border-default, bg-input,
1380
1380
  * bg-canvas, bg-surface, shadow-raised, shadow-overlay, text-text-primary,
1381
1381
  * text-text-secondary, text-text-tertiary, text-text-link,
1382
1382
  * text-brand-primaryAction, border-brand-primaryAction, bg-brand-primaryAction,
@@ -1466,7 +1466,7 @@ interface PublisherBreakdownListProps {
1466
1466
  * @tokens text-text-primary, text-text-tertiary, text-text-secondary,
1467
1467
  * text-text-link, text-text-warning, text-text-success, text-text-danger,
1468
1468
  * border-border-default, bg-surface, bg-subtle, rounded-control, rounded-full,
1469
- * shadow-overlay, text-micro
1469
+ * shadow-overlay, text-badge
1470
1470
  * @behavior Truncates to `defaultVisibleCount` rows with a "See all (N more)"
1471
1471
  * / "Show less" toggle, unless `viewAllHref` is given, in which case the
1472
1472
  * footer becomes a plain link out instead (e.g. to a full breakdown page).
@@ -1646,7 +1646,7 @@ interface NameListModalProps {
1646
1646
  * checkboxes under it. Shared by the Account Lists table and the list detail
1647
1647
  * page so create/rename look identical; `fieldLabel`/`placeholder` relabel it
1648
1648
  * for dialogs that name something other than a list.
1649
- * @tokens bg-scrim, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, rounded-control, bg-input, focus:border-brand-primaryAction
1649
+ * @tokens border-border-strong, bg-scrim, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, rounded-control, bg-input, focus:border-brand-primaryAction
1650
1650
  * @behavior Escape closes the dialog via `onCancel`, same as clicking the
1651
1651
  * scrim backdrop. Submit is disabled until the name is non-empty (trimmed).
1652
1652
  * When `options` are given they render as CheckBox rows below the field, and
@@ -1664,15 +1664,14 @@ interface NameListModalProps {
1664
1664
  declare function NameListModal({ title, initialName, submitLabel, onCancel, onSubmit, fieldLabel, placeholder, options, }: NameListModalProps): react.ReactPortal;
1665
1665
 
1666
1666
  /**
1667
- * Which stroke a chip trigger carries.
1668
- * - `box` : the boxed two-line chip (caption over value), on the default
1669
- * border. The common filter-bar chip.
1670
- * - `inline` : the same white fill with a darker stroke, for chips sitting
1671
- * directly on the warm canvas with no boxed shell around them.
1667
+ * Kept for compatibility. Since 0.18.5 both variants draw the same
1668
+ * `border-strong` stroke, matching SelectFilter, DateRangeFilter,
1669
+ * DataScopeFilter, AdvertiserQuickFilter and SearchBar, so every dropdown
1670
+ * trigger in a filter row has one border colour.
1672
1671
  */
1673
1672
  type ChipVariant = "box" | "inline";
1674
1673
  /** Shared styling for filter-bar chip triggers, so every dropdown chip matches. */
1675
- declare function chipTriggerClass(variant?: ChipVariant): string;
1674
+ declare function chipTriggerClass(_variant?: ChipVariant): string;
1676
1675
  interface ChipContentProps {
1677
1676
  /** Small uppercase label above the value. */
1678
1677
  caption: string;
@@ -1686,11 +1685,10 @@ interface ChipContentProps {
1686
1685
  * @description Shared foundation for filter-bar chip triggers — pairs
1687
1686
  * `chipTriggerClass` with `ChipContent` for the caption/value/icon layout, so
1688
1687
  * every dropdown chip across the app matches.
1689
- * @tokens rounded-control, bg-input, border-border-default, border-border-strong, text-text-secondary, text-text-tertiary, text-text-primary, hover:bg-subtle, focus-visible:outline-border-focus, hover:text-text-primary
1690
- * @behavior `chipTriggerClass` takes a `ChipVariant`: `box` (default, the
1691
- * boxed two-line chip on the default border) or `inline` (same fill, darker
1692
- * stroke, for chips sitting directly on the canvas). It is an argument to
1693
- * that function, not a prop on `ChipContent`.
1688
+ * @tokens text-control-caption, rounded-control, bg-input, border-border-strong, text-text-secondary, text-text-tertiary, text-text-primary, hover:bg-subtle, focus-visible:outline-border-focus, hover:text-text-primary
1689
+ * @behavior `chipTriggerClass` still accepts a `ChipVariant` (`box` or
1690
+ * `inline`) so existing calls compile, but both draw the same `border-strong`
1691
+ * stroke as every other dropdown trigger.
1694
1692
  * Provides only the shared `focus-visible:outline-2` keyboard-focus
1695
1693
  * treatment every dropdown trigger depends on — open/close, Escape, and
1696
1694
  * outside-click dismissal all live in each consumer, not here. A new dropdown
@@ -1856,9 +1854,11 @@ declare const SIZES$1: {
1856
1854
  /** Matches a 15px lucide icon exactly, so a workspace name in a menu row
1857
1855
  * left-aligns with labels in icon-led rows above and below it. */
1858
1856
  readonly xs: "h-[15px] w-[15px] rounded-[4px] text-[8px] tracking-tight";
1857
+ /** 10px, not text-control-caption: that step is for dropdown captions.
1858
+ * Two initials need to sit inside the 24px circle, a step below md. */
1859
1859
  readonly sm: "h-6 w-6 text-[10px]";
1860
- readonly md: "h-7 w-7 text-[11px]";
1861
- readonly lg: "h-11 w-11 text-[15px]";
1860
+ readonly md: "h-7 w-7 text-micro";
1861
+ readonly lg: "h-11 w-11 text-panel-title";
1862
1862
  };
1863
1863
  interface WorkspaceAvatarProps {
1864
1864
  /** Omit for the unscoped "All data workspace". */
@@ -1919,7 +1919,7 @@ declare function Tag({ children, className }: TagProps): react.JSX.Element;
1919
1919
  * first/prev/pages/next/last pager, and the resolved "1 – 25 of N results"
1920
1920
  * range. Owns no state — the host page holds `page` and `perPage` so the
1921
1921
  * paged slice and the bar can't disagree.
1922
- * @tokens rounded-control, border-border-default, bg-input, text-text-primary, text-text-secondary, text-text-tertiary, bg-brand-primaryAction, text-brand-onprimary, hover:bg-subtle, hover:text-text-primary, focus:outline-border-focus
1922
+ * @tokens border-border-strong, rounded-control, bg-input, text-text-primary, text-text-secondary, text-text-tertiary, bg-brand-primaryAction, text-brand-onprimary, hover:bg-subtle, hover:text-text-primary, focus:outline-border-focus
1923
1923
  * @behavior The current page is filled with the brand action color (matching
1924
1924
  * the Contacts pager). First/prev disable on page 1, next/last on the last
1925
1925
  * page — disabled controls stay in the layout so the row never reflows.
@@ -2005,7 +2005,7 @@ interface MultiSelectGroup {
2005
2005
  * button shape (two-line caption + value with a chevron) and opens a
2006
2006
  * searchable checkbox popover. Used for the page-level Media Type /
2007
2007
  * Advertiser filters that share state with the filter tray.
2008
- * @tokens rounded-control, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary, text-text-link, border-border-interactive, bg-brand-primaryAction, bg-input, hover:bg-subtle, hover:text-text-primary, placeholder:text-text-tertiary, text-brand-onprimary
2008
+ * @tokens border-border-strong, rounded-control, rounded-card, border-border-default, bg-surface, shadow-overlay, text-text-primary, text-text-secondary, text-text-tertiary, text-text-link, border-border-interactive, bg-brand-primaryAction, bg-input, hover:bg-subtle, hover:text-text-primary, placeholder:text-text-tertiary, text-brand-onprimary
2009
2009
  * @dependencies lucide-react
2010
2010
  * @behavior `variant` picks the trigger's chip stroke: `box` (default, the
2011
2011
  * boxed two-line chip on the default border) or `inline` (same fill,
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  // <define:__FONT_SIZE_KEYS__>
4
- var define_FONT_SIZE_KEYS_default = ["control-caption", "micro", "xs", "card-title", "dense", "sm", "panel-title", "base", "md", "lg", "xl", "h1"];
4
+ var define_FONT_SIZE_KEYS_default = ["control-caption", "badge", "micro", "xs", "card-title", "dense", "sm", "panel-title", "base", "md", "lg", "xl", "h1"];
5
5
 
6
6
  // src/InfoTip.tsx
7
7
  import { useEffect, useId, useRef, useState } from "react";
@@ -208,7 +208,7 @@ function AdvertiserQuickFilter({
208
208
  children: [
209
209
  icon && /* @__PURE__ */ jsx3("span", { className: "shrink-0 text-text-tertiary", children: icon }),
210
210
  /* @__PURE__ */ jsxs3("span", { className: "flex flex-col gap-1 text-left leading-none", children: [
211
- /* @__PURE__ */ jsx3("span", { className: "text-[10px] uppercase tracking-wide text-text-tertiary", children: caption }),
211
+ /* @__PURE__ */ jsx3("span", { className: "text-control-caption uppercase tracking-wide text-text-tertiary", children: caption }),
212
212
  /* @__PURE__ */ jsx3("span", { className: "text-[12px] font-medium text-text-primary", children: value })
213
213
  ] }),
214
214
  /* @__PURE__ */ jsx3(
@@ -233,7 +233,7 @@ function AdvertiserQuickFilter({
233
233
  "aria-label": caption,
234
234
  "data-testid": testIdPrefix && `${testIdPrefix}-popover`,
235
235
  children: [
236
- /* @__PURE__ */ jsx3("div", { className: "border-b border-border-default p-2", children: /* @__PURE__ */ jsxs3("div", { className: "flex h-9 items-center gap-2 rounded-control border border-border-default bg-input px-2.5 focus-within:border-border-focus focus-within:ring-2 focus-within:ring-border-focus/30", children: [
236
+ /* @__PURE__ */ jsx3("div", { className: "border-b border-border-default p-2", children: /* @__PURE__ */ jsxs3("div", { className: "flex h-9 items-center gap-2 rounded-control border border-border-strong bg-input px-2.5 focus-within:border-border-focus focus-within:ring-2 focus-within:ring-border-focus/30", children: [
237
237
  /* @__PURE__ */ jsx3(Search2, { size: 14, className: "shrink-0 text-text-secondary", "aria-hidden": "true" }),
238
238
  /* @__PURE__ */ jsx3(
239
239
  "input",
@@ -803,7 +803,7 @@ function DateRangeFilter({
803
803
  children: [
804
804
  icon && /* @__PURE__ */ jsx7("span", { className: "shrink-0 text-text-tertiary", children: icon }),
805
805
  /* @__PURE__ */ jsxs6("span", { className: "flex flex-col gap-1 text-left leading-none", children: [
806
- /* @__PURE__ */ jsx7("span", { className: showDates ? "text-[11px] text-text-tertiary" : "text-[10px] uppercase tracking-wide text-text-tertiary", children: showDates ? displayDatesLine : caption }),
806
+ /* @__PURE__ */ jsx7("span", { className: showDates ? "text-[11px] text-text-tertiary" : "text-control-caption uppercase tracking-wide text-text-tertiary", children: showDates ? displayDatesLine : caption }),
807
807
  /* @__PURE__ */ jsx7("span", { className: "text-[12px] font-medium text-text-primary", children: displayValue })
808
808
  ] }),
809
809
  /* @__PURE__ */ jsx7(ChevronDown2, { size: 14, "aria-hidden": "true", className: `shrink-0 text-text-secondary transition-transform ${open ? "rotate-180" : ""}` })
@@ -892,7 +892,7 @@ function DateRangeFilter({
892
892
  function Field({ label, value }) {
893
893
  return /* @__PURE__ */ jsxs6("div", { className: "flex flex-col gap-1.5", children: [
894
894
  /* @__PURE__ */ jsx7("span", { className: "text-[12px] font-medium text-text-secondary", children: label }),
895
- /* @__PURE__ */ jsx7("div", { className: "flex h-10 min-w-[140px] items-center rounded-control border border-border-default bg-input px-3 text-[14px] font-medium text-text-primary", children: value })
895
+ /* @__PURE__ */ jsx7("div", { className: "flex h-10 min-w-[140px] items-center rounded-control border border-border-strong bg-input px-3 text-[14px] font-medium text-text-primary", children: value })
896
896
  ] });
897
897
  }
898
898
  function NavBtn({ children, onClick, ...rest }) {
@@ -1115,7 +1115,7 @@ function ModeRow({
1115
1115
  /* @__PURE__ */ jsx8("span", { className: "text-[14px] font-semibold text-text-primary", children: title }),
1116
1116
  /* @__PURE__ */ jsx8(RowInfoTip, { text: infoText })
1117
1117
  ] }),
1118
- badge && /* @__PURE__ */ jsx8("span", { className: "rounded-full bg-subtle px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-text-secondary", children: badge }),
1118
+ badge && /* @__PURE__ */ jsx8("span", { className: "rounded-full bg-subtle px-2 py-0.5 text-badge font-semibold uppercase tracking-wide text-text-secondary", children: badge }),
1119
1119
  extra
1120
1120
  ] }),
1121
1121
  selected && /* @__PURE__ */ jsx8(Check3, { size: 16, strokeWidth: 2.5, "aria-hidden": "true", className: "shrink-0 text-brand-primaryAction" })
@@ -1312,7 +1312,7 @@ function DataScopeFilter({ value, onChange, align = "right" }) {
1312
1312
  className: "flex h-11 items-center gap-2 rounded-control border border-border-strong bg-input px-2.5 text-text-secondary transition-colors hover:bg-subtle hover:text-text-primary focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-border-focus",
1313
1313
  children: [
1314
1314
  /* @__PURE__ */ jsxs9("span", { className: "flex flex-col gap-1 text-left leading-none", children: [
1315
- /* @__PURE__ */ jsx10("span", { className: "text-[10px] uppercase tracking-wide text-text-tertiary", children: "Data" }),
1315
+ /* @__PURE__ */ jsx10("span", { className: "text-control-caption uppercase tracking-wide text-text-tertiary", children: "Data" }),
1316
1316
  /* @__PURE__ */ jsx10("span", { className: "text-[12px] font-medium text-text-primary", children: display })
1317
1317
  ] }),
1318
1318
  /* @__PURE__ */ jsx10(
@@ -1444,7 +1444,7 @@ function SelectFilter({
1444
1444
  ),
1445
1445
  children: [
1446
1446
  /* @__PURE__ */ jsxs10("span", { className: "flex flex-col gap-1 text-left leading-none", children: [
1447
- /* @__PURE__ */ jsx11("span", { className: "text-[10px] uppercase tracking-wide text-text-tertiary", children: caption }),
1447
+ /* @__PURE__ */ jsx11("span", { className: "text-control-caption uppercase tracking-wide text-text-tertiary", children: caption }),
1448
1448
  /* @__PURE__ */ jsx11("span", { className: "text-[12px] font-medium text-text-primary", children: value })
1449
1449
  ] }),
1450
1450
  /* @__PURE__ */ jsx11(
@@ -2313,7 +2313,7 @@ function SelectionPicker({
2313
2313
  }) }),
2314
2314
  source === "search" && /* @__PURE__ */ jsxs22("div", { className: "flex min-w-0 flex-col gap-3", children: [
2315
2315
  /* @__PURE__ */ jsxs22("div", { className: "flex flex-wrap items-center gap-2", children: [
2316
- /* @__PURE__ */ jsxs22("div", { className: "flex h-9 min-w-[200px] flex-1 items-center gap-2 rounded-control border border-border-default bg-input px-3", children: [
2316
+ /* @__PURE__ */ jsxs22("div", { className: "flex h-9 min-w-[200px] flex-1 items-center gap-2 rounded-control border border-border-strong bg-input px-3", children: [
2317
2317
  /* @__PURE__ */ jsx24(Search4, { size: 15, className: "text-text-secondary", "aria-hidden": "true" }),
2318
2318
  /* @__PURE__ */ jsx24(
2319
2319
  "input",
@@ -2627,7 +2627,7 @@ function FilterDropdown({
2627
2627
  onClick: () => setOpen((v) => !v),
2628
2628
  "aria-expanded": open,
2629
2629
  "data-testid": testIdPrefix && `${testIdPrefix}-filter-${filterSlug}`,
2630
- className: "inline-flex h-9 items-center gap-1.5 whitespace-nowrap rounded-control border border-border-default bg-input px-3 text-[13px] font-medium text-text-secondary transition-colors hover:bg-subtle",
2630
+ className: "inline-flex h-9 items-center gap-1.5 whitespace-nowrap rounded-control border border-border-strong bg-input px-3 text-[13px] font-medium text-text-secondary transition-colors hover:bg-subtle",
2631
2631
  children: [
2632
2632
  label,
2633
2633
  /* @__PURE__ */ jsx24(ChevronDown8, { size: 13, "aria-hidden": "true", className: cx8("transition-transform", open && "rotate-180") })
@@ -2644,7 +2644,7 @@ function FilterDropdown({
2644
2644
  style: { top: pos.top, left: pos.left },
2645
2645
  className: "fixed z-[80] min-w-[220px] rounded-card border border-border-default bg-surface p-2 shadow-overlay",
2646
2646
  children: [
2647
- searchable && /* @__PURE__ */ jsxs22("div", { className: "mb-1.5 flex h-8 items-center gap-2 rounded-control border border-border-default bg-input px-2.5", children: [
2647
+ searchable && /* @__PURE__ */ jsxs22("div", { className: "mb-1.5 flex h-8 items-center gap-2 rounded-control border border-border-strong bg-input px-2.5", children: [
2648
2648
  /* @__PURE__ */ jsx24(Search4, { size: 14, className: "shrink-0 text-text-secondary", "aria-hidden": "true" }),
2649
2649
  /* @__PURE__ */ jsx24(
2650
2650
  "input",
@@ -2755,7 +2755,7 @@ function MetricCells({ spendN, yoy }) {
2755
2755
  return /* @__PURE__ */ jsxs23("span", { className: "flex shrink-0 items-center gap-2 pr-1.5", children: [
2756
2756
  /* @__PURE__ */ jsx25("span", { className: "text-right text-[12px] font-bold tabular-nums text-text-primary", style: { width: COL_CURRENT }, children: fmtM(spendN) }),
2757
2757
  /* @__PURE__ */ jsx25("span", { className: "text-right text-[12px] font-normal tabular-nums text-text-primary", style: { width: COL_PREVIOUS }, children: prior ?? "\u2014" }),
2758
- /* @__PURE__ */ jsx25("span", { className: "flex justify-end", style: { width: COL_YOY }, children: yoy === "NEW" ? /* @__PURE__ */ jsx25("span", { className: "rounded-full bg-status-warning/15 px-1.5 text-micro font-semibold text-text-warning", children: "NEW" }) : /* @__PURE__ */ jsxs23("span", { className: cx9("text-right text-[12px] font-semibold tabular-nums", up ? "text-text-success" : "text-text-danger"), children: [
2758
+ /* @__PURE__ */ jsx25("span", { className: "flex justify-end", style: { width: COL_YOY }, children: yoy === "NEW" ? /* @__PURE__ */ jsx25("span", { className: "rounded-full bg-status-warning/15 px-1.5 text-badge font-semibold text-text-warning", children: "NEW" }) : /* @__PURE__ */ jsxs23("span", { className: cx9("text-right text-[12px] font-semibold tabular-nums", up ? "text-text-success" : "text-text-danger"), children: [
2759
2759
  up ? "+" : "\u2212",
2760
2760
  Math.abs(yoy),
2761
2761
  "%"
@@ -2984,7 +2984,7 @@ function NameListModal({
2984
2984
  value: name,
2985
2985
  onChange: (e) => setName(e.target.value),
2986
2986
  placeholder,
2987
- className: "h-10 rounded-control border border-border-default bg-input px-3 text-sm outline-hidden focus:border-brand-primaryAction"
2987
+ className: "h-10 rounded-control border border-border-strong bg-input px-3 text-sm outline-hidden focus:border-brand-primaryAction"
2988
2988
  }
2989
2989
  )
2990
2990
  ] }),
@@ -3007,18 +3007,17 @@ function NameListModal({
3007
3007
 
3008
3008
  // src/ChipTrigger.tsx
3009
3009
  import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
3010
- function chipTriggerClass(variant = "box") {
3010
+ function chipTriggerClass(_variant = "box") {
3011
3011
  return cn(
3012
- "flex h-11 items-center gap-2 rounded-control border bg-input px-2.5 text-text-secondary transition-colors hover:bg-subtle hover:text-text-primary focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-border-focus",
3013
- // Both variants sit on the input fill. `inline` carries the darker stroke
3014
- // so it still reads as a control against the warm canvas with no boxed
3015
- // shell behind it.
3016
- variant === "inline" ? "border-border-strong" : "border-border-default"
3012
+ "flex h-11 items-center gap-2 rounded-control border border-border-strong bg-input px-2.5 text-text-secondary transition-colors hover:bg-subtle hover:text-text-primary focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-border-focus"
3013
+ // One stroke for every trigger: a `box` chip on the lighter default
3014
+ // border sat beside SelectFilter's darker one in the same row and read as
3015
+ // a different kind of control. The variant no longer changes anything.
3017
3016
  );
3018
3017
  }
3019
3018
  function ChipContent({ caption, value, icon }) {
3020
3019
  const stack = /* @__PURE__ */ jsxs27("span", { className: "flex flex-col gap-1 text-left leading-none", children: [
3021
- /* @__PURE__ */ jsx29("span", { className: "text-[10px] uppercase tracking-wide text-text-tertiary", children: caption }),
3020
+ /* @__PURE__ */ jsx29("span", { className: "text-control-caption uppercase tracking-wide text-text-tertiary", children: caption }),
3022
3021
  /* @__PURE__ */ jsx29("span", { className: "text-[12px] font-medium text-text-primary", children: value })
3023
3022
  ] });
3024
3023
  if (icon) {
@@ -3242,9 +3241,11 @@ var SIZES = {
3242
3241
  /** Matches a 15px lucide icon exactly, so a workspace name in a menu row
3243
3242
  * left-aligns with labels in icon-led rows above and below it. */
3244
3243
  xs: "h-[15px] w-[15px] rounded-[4px] text-[8px] tracking-tight",
3244
+ /** 10px, not text-control-caption: that step is for dropdown captions.
3245
+ * Two initials need to sit inside the 24px circle, a step below md. */
3245
3246
  sm: "h-6 w-6 text-[10px]",
3246
- md: "h-7 w-7 text-[11px]",
3247
- lg: "h-11 w-11 text-[15px]"
3247
+ md: "h-7 w-7 text-micro",
3248
+ lg: "h-11 w-11 text-panel-title"
3248
3249
  };
3249
3250
  function WorkspaceAvatar({ name, size = "md" }) {
3250
3251
  return /* @__PURE__ */ jsx33(
@@ -3314,7 +3315,7 @@ function TablePagination({
3314
3315
  onChange: (e) => onPerPageChange(Number(e.target.value)),
3315
3316
  "aria-label": "Items per page",
3316
3317
  "data-testid": testIdPrefix && `${testIdPrefix}-per-page`,
3317
- className: "appearance-none rounded-control border border-border-default bg-input py-1 pl-2.5 pr-7 text-[13px] font-medium text-text-primary focus:outline focus:outline-2 focus:outline-border-focus",
3318
+ className: "appearance-none rounded-control border border-border-strong bg-input py-1 pl-2.5 pr-7 text-[13px] font-medium text-text-primary focus:outline focus:outline-2 focus:outline-border-focus",
3318
3319
  children: perPageOptions.map((n) => /* @__PURE__ */ jsx35("option", { value: n, children: n }, n))
3319
3320
  }
3320
3321
  ),
@@ -3455,7 +3456,7 @@ function MiniSelect({ value, onChange, options }) {
3455
3456
  const opt = options.find((o) => String(o.value) === e.target.value);
3456
3457
  if (opt) onChange(opt.value);
3457
3458
  },
3458
- className: "rounded-control border border-border-default bg-input px-1.5 py-1 text-[12px] text-text-primary outline-hidden focus:border-border-focus",
3459
+ className: "rounded-control border border-border-strong bg-input px-1.5 py-1 text-[12px] text-text-primary outline-hidden focus:border-border-focus",
3459
3460
  children: options.map((o) => /* @__PURE__ */ jsx36("option", { value: String(o.value), children: o.label }, String(o.value)))
3460
3461
  }
3461
3462
  );
@@ -3528,7 +3529,7 @@ function DateRangePicker({
3528
3529
  className: chipTriggerClass(),
3529
3530
  children: [
3530
3531
  /* @__PURE__ */ jsxs32("span", { className: "flex flex-col gap-1 text-left leading-none", children: [
3531
- /* @__PURE__ */ jsx36("span", { className: "text-[10px] text-text-tertiary", children: spanLabel(value, end) }),
3532
+ /* @__PURE__ */ jsx36("span", { className: "text-control-caption text-text-tertiary", children: spanLabel(value, end) }),
3532
3533
  /* @__PURE__ */ jsx36("span", { className: "text-[12px] font-medium text-text-primary", children: value })
3533
3534
  ] }),
3534
3535
  /* @__PURE__ */ jsx36(ChevronDown10, { size: 14, "aria-hidden": "true", className: cn("shrink-0 text-text-secondary transition-transform", open && "rotate-180") })
@@ -3708,7 +3709,7 @@ function MultiSelectFilter({
3708
3709
  role: "dialog",
3709
3710
  "aria-label": caption,
3710
3711
  children: [
3711
- searchable && /* @__PURE__ */ jsx37("div", { className: "border-b border-border-default p-2", children: /* @__PURE__ */ jsxs33("div", { className: "flex h-9 items-center gap-2 rounded-control border border-border-default bg-input px-2.5", children: [
3712
+ searchable && /* @__PURE__ */ jsx37("div", { className: "border-b border-border-default p-2", children: /* @__PURE__ */ jsxs33("div", { className: "flex h-9 items-center gap-2 rounded-control border border-border-strong bg-input px-2.5", children: [
3712
3713
  /* @__PURE__ */ jsx37(Search5, { size: 14, className: "text-text-secondary", "aria-hidden": "true" }),
3713
3714
  /* @__PURE__ */ jsx37(
3714
3715
  "input",