@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.cjs +27 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -23
- package/dist/index.d.ts +23 -23
- package/dist/index.js +27 -26
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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-
|
|
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
|
-
*
|
|
1668
|
-
*
|
|
1669
|
-
*
|
|
1670
|
-
*
|
|
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(
|
|
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-
|
|
1690
|
-
* @behavior `chipTriggerClass`
|
|
1691
|
-
*
|
|
1692
|
-
* stroke
|
|
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-
|
|
1861
|
-
readonly lg: "h-11 w-11 text-
|
|
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
|
|
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-
|
|
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
|
-
*
|
|
1668
|
-
*
|
|
1669
|
-
*
|
|
1670
|
-
*
|
|
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(
|
|
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-
|
|
1690
|
-
* @behavior `chipTriggerClass`
|
|
1691
|
-
*
|
|
1692
|
-
* stroke
|
|
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-
|
|
1861
|
-
readonly lg: "h-11 w-11 text-
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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(
|
|
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
|
-
//
|
|
3014
|
-
//
|
|
3015
|
-
//
|
|
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-
|
|
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-
|
|
3247
|
-
lg: "h-11 w-11 text-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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",
|