@assure-one/design-system 1.47.1 → 1.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,12 @@
1
1
  import * as React$1 from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import { C as ComboboxSize } from '../brand-scope-DwLzUrSY.js';
5
- export { B as BRAND_PRODUCTS, a as BrandProduct, b as brandLabel } from '../brand-scope-DwLzUrSY.js';
6
- import { c as ComingSoonMessages } from '../types-BTHIs2nk.js';
4
+ import { C as ComboboxSize } from '../brand-scope-ObBYNT0J.js';
5
+ export { B as BRAND_PRODUCTS, a as BrandProduct, b as brandLabel } from '../brand-scope-ObBYNT0J.js';
6
+ import { c as ComingSoonMessages } from '../types-CKpkEBvW.js';
7
7
  import '../vocab-DornLJbW.js';
8
8
  import '../system-DfJIVBlJ.js';
9
+ import '../option-izy_4w4Z.js';
9
10
 
10
11
  interface BrandIconProps extends React.SVGAttributes<SVGElement> {
11
12
  size?: number;
@@ -139,6 +140,30 @@ interface LogoProps {
139
140
  }
140
141
  declare function Logo({ size, href, showText, className, iconClassName, textClassName, productName, inverted, }: LogoProps): react_jsx_runtime.JSX.Element;
141
142
 
143
+ /** The vendor keys, matching the products' catalogue keys in consuming apps. */
144
+ type TaxSoftwareVendor = "cch_axcess" | "ultratax" | "atx" | "taxact" | "proconnect" | "proseries" | "lacerte" | "drake";
145
+ /** Plate heights, on the `Avatar` size scale. */
146
+ type TaxSoftwareLogoSize = "sm" | "md" | "lg";
147
+ /** Props of `TaxSoftwareLogo`; everything else spreads onto the outer `<span>`. */
148
+ interface TaxSoftwareLogoProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, "children" | "aria-label" | "aria-hidden" | "role"> {
149
+ /**
150
+ * The vendor. A key without an official mark (`cch_axcess`, `ultratax`,
151
+ * `atx`), an unknown key or none renders the initials `Avatar` fallback.
152
+ */
153
+ vendor?: TaxSoftwareVendor | undefined;
154
+ /** Plate height, from the `Avatar` size scale. Default `md`. */
155
+ size?: TaxSoftwareLogoSize;
156
+ /**
157
+ * Accessible name. Omit it (the default) when the vendor's name is shown
158
+ * beside the mark: the logo is then decorative (`aria-hidden`). Pass it when
159
+ * the mark stands alone for the product. Also names the fallback's initials
160
+ * for an unknown vendor.
161
+ */
162
+ label?: string;
163
+ }
164
+ /** The official mark of a tax-software vendor, or the initials `Avatar` fallback. */
165
+ declare const TaxSoftwareLogo: React$1.ForwardRefExoticComponent<TaxSoftwareLogoProps & React$1.RefAttributes<HTMLSpanElement>>;
166
+
142
167
  /**
143
168
  * AgreementViewer — the chrome + navigation shell for a multi-step, branded
144
169
  * agreement / proposal (the "Signed Agreement Viewer"). It owns the header,
@@ -840,6 +865,15 @@ interface SidebarBrandSwitcherProps {
840
865
  * not bind to a framework-specific image element.
841
866
  */
842
867
  brand?: React$1.ReactNode;
868
+ /**
869
+ * The collapsed rail's glyph: rendered only while the sidebar is railed,
870
+ * centred in the icon column, in place of `brand` (which then shows only
871
+ * expanded). Pass the product mark here and the wordmark as `label`, and
872
+ * the brand row needs no state classes of its own — the usual cause of a
873
+ * rail with no logo at all is a hand-written `hidden …:block` toggle whose
874
+ * group selector matches nothing.
875
+ */
876
+ mark?: React$1.ReactNode;
843
877
  /** Wordmark / label rendered next to the brand glyph in the trigger. */
844
878
  label: React$1.ReactNode;
845
879
  /**
@@ -1001,4 +1035,4 @@ interface DocumentRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "t
1001
1035
  }
1002
1036
  declare const DocumentRow: React$1.ForwardRefExoticComponent<DocumentRowProps & React$1.RefAttributes<HTMLDivElement>>;
1003
1037
 
1004
- export { type AgreementFirm, AgreementPaneHeading, type AgreementPaneHeadingProps, type AgreementStatus, type AgreementStep, AgreementViewer, type AgreementViewerProps, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, type BrandIconProps, ClientSelect, type ClientSelectOption, ComingSoon, type ComingSoonProps, DocumentDetailActions, type DocumentDetailActionsProps, DocumentDetailBody, type DocumentDetailBodyProps, DocumentDetailHeader, type DocumentDetailHeaderProps, DocumentDetailMetaRow, type DocumentDetailMetaRowProps, DocumentDetailPanel, type DocumentDetailPanelProps, DocumentDetailRequester, type DocumentDetailRequesterProps, DocumentDetailTitle, type DocumentDetailTitleProps, DocumentList, type DocumentListProps, DocumentListSection, type DocumentListSectionProps, DocumentRow, type DocumentRowProps, Grid, type GridColumn, type GridInputType, type GridProps, type GridRow, type GridValue, Logo, ProposalAddOn, type ProposalAddOnProps, type ProposalBillingMode, type ProposalBillingRow, ProposalBillingTerms, type ProposalBillingTermsProps, ProposalConsentGate, type ProposalConsentGateProps, ProposalCustomPage, type ProposalCustomPageKind, type ProposalCustomPageProps, ProposalNote, type ProposalNoteProps, ProposalPackageCard, type ProposalPackageCardProps, type ProposalPackageMode, ProposalPaymentCapture, type ProposalPaymentCaptureProps, ProposalPricingSummary, type ProposalPricingSummaryProps, ProposalServiceRow, type ProposalServiceRowProps, ProposalSignatureBlock, type ProposalSignatureBlockProps, type ProposalSigner, ProposalSignerList, type ProposalSignerListProps, type ProposalSignerStatus, QUESTION_TYPES, QUESTION_TYPE_CONTRACT_VERSION, type QuestionAddressValue, type QuestionFileValue, type QuestionHelp, type QuestionLabeledColumn, type QuestionLabeledRow, type QuestionLabeledValue, type QuestionNameValue, type QuestionOption, type QuestionTableColumn, type QuestionTableRow, type QuestionType, Questions, type QuestionsProps, SidebarBrandSwitcher, type SidebarBrandSwitcherExtra, type SidebarBrandSwitcherItem, type SidebarBrandSwitcherProps, SidebarBrandSwitcherTile };
1038
+ export { type AgreementFirm, AgreementPaneHeading, type AgreementPaneHeadingProps, type AgreementStatus, type AgreementStep, AgreementViewer, type AgreementViewerProps, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, type BrandIconProps, ClientSelect, type ClientSelectOption, ComingSoon, type ComingSoonProps, DocumentDetailActions, type DocumentDetailActionsProps, DocumentDetailBody, type DocumentDetailBodyProps, DocumentDetailHeader, type DocumentDetailHeaderProps, DocumentDetailMetaRow, type DocumentDetailMetaRowProps, DocumentDetailPanel, type DocumentDetailPanelProps, DocumentDetailRequester, type DocumentDetailRequesterProps, DocumentDetailTitle, type DocumentDetailTitleProps, DocumentList, type DocumentListProps, DocumentListSection, type DocumentListSectionProps, DocumentRow, type DocumentRowProps, Grid, type GridColumn, type GridInputType, type GridProps, type GridRow, type GridValue, Logo, ProposalAddOn, type ProposalAddOnProps, type ProposalBillingMode, type ProposalBillingRow, ProposalBillingTerms, type ProposalBillingTermsProps, ProposalConsentGate, type ProposalConsentGateProps, ProposalCustomPage, type ProposalCustomPageKind, type ProposalCustomPageProps, ProposalNote, type ProposalNoteProps, ProposalPackageCard, type ProposalPackageCardProps, type ProposalPackageMode, ProposalPaymentCapture, type ProposalPaymentCaptureProps, ProposalPricingSummary, type ProposalPricingSummaryProps, ProposalServiceRow, type ProposalServiceRowProps, ProposalSignatureBlock, type ProposalSignatureBlockProps, type ProposalSigner, ProposalSignerList, type ProposalSignerListProps, type ProposalSignerStatus, QUESTION_TYPES, QUESTION_TYPE_CONTRACT_VERSION, type QuestionAddressValue, type QuestionFileValue, type QuestionHelp, type QuestionLabeledColumn, type QuestionLabeledRow, type QuestionLabeledValue, type QuestionNameValue, type QuestionOption, type QuestionTableColumn, type QuestionTableRow, type QuestionType, Questions, type QuestionsProps, SidebarBrandSwitcher, type SidebarBrandSwitcherExtra, type SidebarBrandSwitcherItem, type SidebarBrandSwitcherProps, SidebarBrandSwitcherTile, TaxSoftwareLogo, type TaxSoftwareLogoProps, type TaxSoftwareLogoSize, type TaxSoftwareVendor };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- export { AgreementPaneHeading, AgreementViewer, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, BRAND_PRODUCTS, ClientSelect, ComingSoon, Grid, Logo, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, QUESTION_TYPES, QUESTION_TYPE_CONTRACT_VERSION, Questions, SidebarBrandSwitcher, SidebarBrandSwitcherTile, brandLabel } from '../chunk-6CXI3KRG.js';
3
- export { DocumentDetailActions, DocumentDetailBody, DocumentDetailHeader, DocumentDetailMetaRow, DocumentDetailPanel, DocumentDetailRequester, DocumentDetailTitle, DocumentList, DocumentListSection, DocumentRow } from '../chunk-IIBDSTOG.js';
2
+ export { AgreementPaneHeading, AgreementViewer, AssureAuditBrandIcon, AssureBooksBrandIcon, AssureProBrandIcon, AssureTaxBrandIcon, BRAND_PRODUCTS, ClientSelect, ComingSoon, Grid, Logo, ProposalAddOn, ProposalBillingTerms, ProposalConsentGate, ProposalCustomPage, ProposalNote, ProposalPackageCard, ProposalPaymentCapture, ProposalPricingSummary, ProposalServiceRow, ProposalSignatureBlock, ProposalSignerList, QUESTION_TYPES, QUESTION_TYPE_CONTRACT_VERSION, Questions, SidebarBrandSwitcher, SidebarBrandSwitcherTile, TaxSoftwareLogo, brandLabel } from '../chunk-FO2WSYUA.js';
3
+ export { DocumentDetailActions, DocumentDetailBody, DocumentDetailHeader, DocumentDetailMetaRow, DocumentDetailPanel, DocumentDetailRequester, DocumentDetailTitle, DocumentList, DocumentListSection, DocumentRow } from '../chunk-HV24JSRN.js';
4
4
  import '../chunk-ARCWF2S3.js';
5
5
  import '../chunk-EUHGZA6Q.js';
6
6
  import '../chunk-YRHRVOLV.js';
@@ -354,6 +354,20 @@ interface AppHeaderMessages {
354
354
  interface BulkActionBarMessages {
355
355
  /** The default accessible name of the clear button. Default `"Clear selection"`. */
356
356
  clearSelection: string;
357
+ /** The default accessible name of the toolbar. Default `"Bulk actions"`. */
358
+ toolbar: string;
359
+ /** The default count label, also announced politely. Default `"{count} selected"`. */
360
+ selected: (count: number) => string;
361
+ /** Announced when the selection is cleared (bars that stay mounted). Default `"Selection cleared"`. */
362
+ cleared: string;
363
+ /** The visible label of a `labelled` Clear. Default `"Clear"`. */
364
+ clear: string;
365
+ /** The key hint beside a `labelled` Clear. Default `"Esc"`. */
366
+ escapeKey: string;
367
+ /** The label of `BulkActionBarMore`. Default `"More"`. */
368
+ more: string;
369
+ /** Eligibility of a menu option across the selection. Default `"{eligible} of {total}"`. */
370
+ eligible: (eligible: number, total: number) => string;
357
371
  }
358
372
  /** The copy a `Table` renders. @experimental */
359
373
  interface TableMessages {
@@ -366,6 +380,22 @@ interface TableMessages {
366
380
  collapseSection: string;
367
381
  /** A `TableGroupRow`'s collapse toggle while closed. Default `"Expand section"`. */
368
382
  expandSection: string;
383
+ /**
384
+ * Screen-reader text of a multi-sorted header's rank (`TableHead sortIndex`),
385
+ * ascending. Default `"Sorted ascending, priority {rank}"`.
386
+ */
387
+ sortedAscending: (rank: number) => string;
388
+ /** As `sortedAscending`, descending. Default `"Sorted descending, priority {rank}"`. */
389
+ sortedDescending: (rank: number) => string;
390
+ /** The resize handle's accessible name when the header has no text label. Default `"Resize column"`. */
391
+ resizeColumn: string;
392
+ /** The resize handle's accessible name. Default `"Resize {label}"`. */
393
+ resizeColumnNamed: (label: string) => string;
394
+ /**
395
+ * A `TableGroupRow`'s count while only some of the group's rows are loaded
396
+ * (infinite mode). Default `"{loaded} of {total} loaded"`.
397
+ */
398
+ groupLoadedOf: (loaded: string, total: string) => string;
369
399
  }
370
400
  /** The copy a `TableDensityToggle` renders. @experimental */
371
401
  interface TableDensityMessages {
@@ -419,6 +449,36 @@ interface DataTableMessages {
419
449
  selectAll: string;
420
450
  /** The accessible name of a row's selection checkbox (W6-06). Default `"Select row"`. */
421
451
  selectRow: string;
452
+ /** A header menu trigger's accessible name. Default `"Column options for {label}"`. */
453
+ columnOptions: (label: string) => string;
454
+ /** Header menu item. Default `"Sort ascending"`. */
455
+ sortAscending: string;
456
+ /** Header menu item. Default `"Sort descending"`. */
457
+ sortDescending: string;
458
+ /** Header menu item. Default `"Clear sort"`. */
459
+ clearSort: string;
460
+ /** Header menu item. Default `"Move left"`. */
461
+ moveLeft: string;
462
+ /** Header menu item. Default `"Move right"`. */
463
+ moveRight: string;
464
+ /** Header menu item. Default `"Hide column"`. */
465
+ hideColumn: string;
466
+ /** Header menu item. Default `"Pin column"`. */
467
+ pinColumn: string;
468
+ /** Header menu item. Default `"Unpin column"`. */
469
+ unpinColumn: string;
470
+ /** Header menu item. Default `"Autosize column"`. */
471
+ autosizeColumn: string;
472
+ /** Header menu item. Default `"Reset columns"`. */
473
+ resetColumns: string;
474
+ /** `DataTableLoadMore`'s button. Default `"Load more"`. */
475
+ loadMore: string;
476
+ /** `DataTableLoadMore`'s status while a page loads. Default `"Loading more…"`. */
477
+ loadingMore: string;
478
+ /** `DataTableLoadMore`'s end-of-list status. Default `"All {count} loaded"`. */
479
+ allLoaded: (count: string) => string;
480
+ /** `DataTableLoadMore`'s progress status. Default `"{loaded} of {total} loaded"`. */
481
+ loadedOf: (loaded: string, total: string) => string;
422
482
  }
423
483
  /**
424
484
  * The copy a `ConfirmDialog` renders when the caller gives no label (W5-16);
@@ -446,6 +506,222 @@ interface ComingSoonMessages {
446
506
  /** The pill under the feature list. Default `"In Development"`. */
447
507
  badge: string;
448
508
  }
509
+ /** The copy a `StatStrip` renders. @experimental */
510
+ interface StatStripMessages {
511
+ /** The default accessible name of the strip. Default `"Summary"`. */
512
+ region: string;
513
+ /** The collapse chevron's name while expanded. Default `"Collapse summary"`. */
514
+ collapse: string;
515
+ /** The collapse chevron's name while collapsed. Default `"Expand summary"`. */
516
+ expand: string;
517
+ }
518
+ /**
519
+ * The copy a `DisplayMenu` renders around the consumer's own section labels
520
+ * (PR 3, table system). Owned by `display-menu.tsx`.
521
+ *
522
+ * @experimental
523
+ */
524
+ interface DisplayMenuMessages {
525
+ /** The default trigger label. Default `"Display"`. */
526
+ trigger: string;
527
+ /** The default trigger tooltip. Default `"Filters, grouping, ordering, columns"`. */
528
+ tooltip: string;
529
+ /** The trigger's accessible name while customised. */
530
+ triggerCustomised: (label: string) => string;
531
+ /** The root search placeholder. Default `"Filter…"`. */
532
+ rootSearchPlaceholder: string;
533
+ /** The root search's accessible name. */
534
+ rootSearchLabel: string;
535
+ /** The reset action. Default `"Reset to default"`. */
536
+ reset: string;
537
+ /** Empty search result. Default `"No matches"`. */
538
+ noMatches: string;
539
+ /** A section with no options. Default `"Nothing to filter by"`. */
540
+ nothingToFilter: string;
541
+ /** A flyout's search placeholder. */
542
+ sectionSearchPlaceholder: (section: string) => string;
543
+ /** A flyout's search accessible name. */
544
+ sectionSearchLabel: (section: string) => string;
545
+ /** The flyout's clear action. */
546
+ clearSelected: (count: number) => string;
547
+ /** Heading over `group: "filter"` sections. Default `"Filter"`. */
548
+ groupFilter: string;
549
+ /** Heading over `group: "arrange"` sections. Default `"Arrange"`. */
550
+ groupArrange: string;
551
+ /** The trigger's accessible name while `activeCount` > 0. Default `"{label}, {count} active"`. */
552
+ activeFilters: (label: string, count: number) => string;
553
+ /** The match-all/any control's accessible name. Default `"Match"`. */
554
+ matchLabel: string;
555
+ /** The "match all" segment. Default `"All filters"`. */
556
+ matchAll: string;
557
+ /** The "match any" segment. Default `"Any filter"`. */
558
+ matchAny: string;
559
+ /** The saved-views picker's accessible name and list label. Default `"Views"`. */
560
+ views: string;
561
+ /** The picker's label when no view is active. Default `"Custom view"`. */
562
+ noView: string;
563
+ /** The save action. Default `"Save view"`. */
564
+ saveView: string;
565
+ /** Spoken with the dirty dot. Default `"unsaved changes"`. */
566
+ unsavedChanges: string;
567
+ /** Live announcement: an option was selected. */
568
+ announceSelected: (section: string, option: string) => string;
569
+ /** Live announcement: an option was deselected. */
570
+ announceDeselected: (section: string, option: string) => string;
571
+ /** Live announcement: a section was cleared. */
572
+ announceCleared: (section: string) => string;
573
+ /** Live announcement: everything was reset. Default `"Display reset to default"`. */
574
+ announceReset: string;
575
+ /** Live announcement: a saved view was applied. */
576
+ announceView: (view: string) => string;
577
+ }
578
+ /**
579
+ * The copy the typed `DisplayMenu` filter panels render (operators, date
580
+ * presets, number/text/boolean editors, sort and column panels). Owned by
581
+ * `display-menu-panels.tsx` / `display-menu-filters.ts`.
582
+ *
583
+ * @experimental
584
+ */
585
+ interface DisplayMenuFiltersMessages {
586
+ /** The operator picker's accessible name. Default `"Operator"`. */
587
+ operator: string;
588
+ /** Operator labels of a value-list section. */
589
+ operatorIs: string;
590
+ operatorIsNot: string;
591
+ operatorIsAnyOf: string;
592
+ operatorIsNoneOf: string;
593
+ operatorIsEmpty: string;
594
+ operatorIsNotEmpty: string;
595
+ /** Overflow of a summarised value list ("Active, Draft +3"). */
596
+ more: (count: number) => string;
597
+ /** A flyout list's search field: accessible name. */
598
+ search: (section: string) => string;
599
+ /** A flyout list's search field: placeholder. */
600
+ searchPlaceholder: string;
601
+ /** A list or search with no matching option. */
602
+ noMatches: string;
603
+ /** The "clear this filter" action. */
604
+ clear: string;
605
+ /** Person section: the signed-in user, pinned first. */
606
+ me: string;
607
+ /** Person section: no assignee, pinned after "Me". */
608
+ unassigned: string;
609
+ /** Tags section: the any/all group's accessible name. */
610
+ tagMatch: string;
611
+ /** Tags section: a row needs any selected tag. */
612
+ tagMatchAny: string;
613
+ /** Tags section: a row needs every selected tag. */
614
+ tagMatchAll: string;
615
+ /** Tags summary prefix when matching all ("all of"). */
616
+ tagMatchAllSummary: (labels: string) => string;
617
+ /** Date section headings and preset labels. */
618
+ dateDue: string;
619
+ dateCalendar: string;
620
+ datePresets: string;
621
+ overdue: string;
622
+ dueToday: string;
623
+ dueNext7: string;
624
+ dueThisMonth: string;
625
+ noDate: string;
626
+ today: string;
627
+ last7: string;
628
+ last30: string;
629
+ thisMonth: string;
630
+ lastMonth: string;
631
+ thisQuarter: string;
632
+ lastQuarter: string;
633
+ ytd: string;
634
+ custom: string;
635
+ /** Custom range inputs. */
636
+ dateFrom: string;
637
+ dateTo: string;
638
+ /** Custom range summaries. */
639
+ dateBetween: (from: string, to: string) => string;
640
+ dateOnOrAfter: (from: string) => string;
641
+ dateOnOrBefore: (to: string) => string;
642
+ /** Number section: operator names (accessible) — symbols render visually. */
643
+ numberEq: string;
644
+ numberNe: string;
645
+ numberLt: string;
646
+ numberLte: string;
647
+ numberGt: string;
648
+ numberGte: string;
649
+ numberBetween: string;
650
+ /** Number inputs. */
651
+ numberValue: string;
652
+ numberMin: string;
653
+ numberMax: string;
654
+ /** Number input that does not parse. */
655
+ numberInvalid: string;
656
+ /** Number summary for `between`. */
657
+ numberBetweenSummary: (from: string, to: string) => string;
658
+ /** Text section operators and input. */
659
+ textContains: string;
660
+ textStartsWith: string;
661
+ textValue: string;
662
+ textContainsSummary: (text: string) => string;
663
+ textStartsWithSummary: (text: string) => string;
664
+ /** Boolean section. */
665
+ booleanAny: string;
666
+ booleanTrue: string;
667
+ booleanFalse: string;
668
+ /** Ordering section. */
669
+ sortBy: string;
670
+ sortThenBy: string;
671
+ sortField: (position: string) => string;
672
+ sortDirection: (field: string) => string;
673
+ ascending: string;
674
+ descending: string;
675
+ addSort: string;
676
+ chooseField: string;
677
+ removeSort: (field: string) => string;
678
+ makePrimary: (field: string) => string;
679
+ sortSummary: (fields: string) => string;
680
+ /** Columns section. */
681
+ columnsList: string;
682
+ showColumn: (column: string) => string;
683
+ moveUp: (column: string) => string;
684
+ moveDown: (column: string) => string;
685
+ locked: string;
686
+ resetColumns: string;
687
+ columnMoved: (column: string, position: number, total: number) => string;
688
+ columnShown: (column: string) => string;
689
+ columnHidden: (column: string) => string;
690
+ /** Ordering announcement. */
691
+ sortChanged: (summary: string) => string;
692
+ }
693
+ /** The copy a `FilterChips` row renders (PR 3, table system). @experimental */
694
+ interface FilterChipsMessages {
695
+ /** The row's accessible name. Default `"Active filters"`. */
696
+ region: string;
697
+ /** A facet chip's text: `"Status: Active, Draft"`. */
698
+ facet: (label: string, summary: string) => string;
699
+ /** A facet chip's remove button. Default `"Remove {label} filter"`. */
700
+ remove: (label: string) => string;
701
+ /** A value's remove button in the overflow panel. Default `"Remove {value} from {label}"`. */
702
+ removeValue: (label: string, value: string) => string;
703
+ /** The collapsed chip's visible text. Default `"+{count}"`. */
704
+ more: (count: number) => string;
705
+ /** The collapsed chip's accessible name. Default `"{count} more filters"`. */
706
+ moreLabel: (count: number) => string;
707
+ /** The overflow panel's heading. Default `"Active filters ({count})"`. */
708
+ panelTitle: (count: number) => string;
709
+ /** The overflow panel's clear action. Default `"Clear filters"`. */
710
+ clearFilters: string;
711
+ /** The trailing clear action. Default `"Clear all"`. */
712
+ clearAll: string;
713
+ }
714
+ /** The copy a `ListPage` renders (PR 3, table system). @experimental */
715
+ interface ListPageMessages {
716
+ /** The accessible name of the table scroll region. Default `"Results"`. */
717
+ tableRegion: string;
718
+ /** A paged count: `"1–20 of 239"`. */
719
+ range: (start: string, end: string, total: string) => string;
720
+ /** An infinite-list count: `"240 of 1,240 loaded"`. */
721
+ loaded: (loaded: string, total: string) => string;
722
+ /** A plain count. Default `"{total} results"`. */
723
+ total: (total: string) => string;
724
+ }
449
725
  /**
450
726
  * The whole catalogue, one namespace per component. This is the type a
451
727
  * consumer's i18n lint can check for completeness.
@@ -501,6 +777,11 @@ interface DsMessages {
501
777
  spreadsheetPreview: SpreadsheetPreviewMessages;
502
778
  peoplePicker: PeoplePickerMessages;
503
779
  comingSoon: ComingSoonMessages;
780
+ statStrip: StatStripMessages;
781
+ displayMenu: DisplayMenuMessages;
782
+ displayMenuFilters: DisplayMenuFiltersMessages;
783
+ filterChips: FilterChipsMessages;
784
+ listPage: ListPageMessages;
504
785
  }
505
786
  /** A component namespace of the catalogue. @experimental */
506
787
  type DsMessageNamespace = keyof DsMessages;
@@ -514,4 +795,4 @@ type DsMessagesOverride = {
514
795
  [N in DsMessageNamespace]?: Partial<DsMessages[N]>;
515
796
  };
516
797
 
517
- export type { ComboboxMessages as C, DsMessageNamespace as D, ErrorStateMessages as E, FileUploadMessages as F, KeyboardShortcutsMessages as K, PaginationMessages as P, SelectMessages as S, TableMessages as T, DsMessages as a, DsMessagesOverride as b, ComingSoonMessages as c, CommandPaletteMessages as d, ConfirmMessages as e, CopyButtonMessages as f, PhoneFieldMessages as g, SearchInputMessages as h, TableDensityMessages as i, ToastMessages as j, FieldMessages as k, TableStatesMessages as l, DataTableMessages as m };
798
+ export type { BulkActionBarMessages as B, ComboboxMessages as C, DsMessageNamespace as D, ErrorStateMessages as E, FileUploadMessages as F, KeyboardShortcutsMessages as K, ListPageMessages as L, PaginationMessages as P, SelectMessages as S, TableMessages as T, DsMessages as a, DsMessagesOverride as b, ComingSoonMessages as c, CommandPaletteMessages as d, ConfirmMessages as e, CopyButtonMessages as f, PhoneFieldMessages as g, SearchInputMessages as h, TableDensityMessages as i, ToastMessages as j, FieldMessages as k, TableStatesMessages as l, DisplayMenuMessages as m, DisplayMenuFiltersMessages as n, FilterChipsMessages as o, DataTableMessages as p, StatStripMessages as q };
@@ -2,7 +2,7 @@
2
2
 
3
3
  <!-- Generated by `pnpm docs:catalogue` from api/*.api.md and docs/components.registry.json. Do not edit by hand; edit the registry and regenerate. -->
4
4
 
5
- Every public component of `@assure-one/design-system`, in one place: **524 component exports** — 183 component families with 229 compound parts, and 195 icons — plus the hooks, utilities, tokens and testing helpers the package exports. The list is derived from the API reports, so a public component cannot be missing from this page (`pnpm docs:catalogue --check` runs in `pnpm test:contracts`).
5
+ Every public component of `@assure-one/design-system`, in one place: **543 component exports** — 189 component families with 243 compound parts, and 195 icons — plus the hooks, utilities, tokens and testing helpers the package exports. The list is derived from the API reports, so a public component cannot be missing from this page (`pnpm docs:catalogue --check` runs in `pnpm test:contracts`).
6
6
 
7
7
  **How to use this page.** Start from the ["Pick a component"](#pick-a-component) table with the UI need you have, or from ["Never hand-roll"](#never-hand-roll) with the raw element you were about to write; links land on the category section that holds the row. Every row links to the story that shows the states. The short rulebook for agents and new contributors is [`docs/for-ai-agents.md`](./for-ai-agents.md).
8
8
 
@@ -114,12 +114,13 @@ Things you press. Every clickable control is one of these; a `<button>`, `<a rol
114
114
  | **CopyButton**<br>since 0.0.0 | Copy a value to the clipboard with check-mark feedback (ids, codes, links). | The copy needs a confirmation toast or copies rich content — compose `IconButton` + `useToast`. | `navigator.clipboard.writeText + useState` | [IconButton](#actions), [ToastProvider](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/copy-button.stories.tsx) |
115
115
  | **ConfirmActionButton**<br>since 0.3.0 | A destructive or irreversible action that needs a confirmation step: a trigger plus `ConfirmDialog`, retiring `window.confirm()`. `destructive={false}` (alias of `intent="brand"`) for a non-destructive confirm. | The confirmation is imperative (`useConfirm`) or the action is reversible (act, then offer undo in a toast). | `window.confirm()`, `useState + AlertDialog boilerplate` | [ConfirmDialog](#overlays), [AlertDialog](#overlays), [DangerAction](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/confirm-action-button.stories.tsx) |
116
116
  | **Intent actions**<br>parts: `SecondaryAction`, `DangerAction`, `LinkAction`, `IconAction`<br>since 0.3.0 | Intent-named `Button` wrappers for product code that reads by role: primary, secondary, danger, link-styled, icon-only. | You need the full variant × intent matrix or a size outside the defaults (`Button`, `IconButton`). | — | [Button](#actions), [IconButton](#actions), [LinkButton](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/intent-actions.stories.tsx) |
117
- | **BulkActionBar**<br>parts: `BulkActionBarAction`, `BulkActionBarSeparator`<br>since 0.15.0 | A floating bar that appears when rows are selected: selection count, actions, separators, clear. | Actions apply to one record (row menu via `DropdownMenu`) or belong to the page (`PageHeader` actions). | — | [DataTable](#data-display), [StickyActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/bulk-action-bar.stories.tsx) |
117
+ | **BulkActionBar**<br>parts: `BulkActionBarAction`, `BulkActionBarSeparator`, `BulkActionBarMenu`, `BulkActionBarMenuRadioGroup`, `BulkActionBarMenuItem`, `BulkActionBarMenuSub`, `BulkActionBarMore`, `BulkActionBarPicker`<br>also: `sharedBulkValue`<br>since 0.15.0 | A bar that appears when rows are selected: count (live-announced) and scope, actions, two-tier menus (`BulkActionBarMenu` for enumerations, `BulkActionBarPicker` for searchable pickers), a `More` overflow, clear with Esc. `variant="floating"` for new list pages. | Actions apply to one record (row menu via `DropdownMenu`) or belong to the page (`PageHeader` actions). | — | [DataTable](#data-display), [StickyActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/bulk-action-bar.stories.tsx) |
118
118
  | **StickyActionBar**<br>since 1.3.0 | Save / Cancel that stays visible at the bottom of a long form or settings page, with an optional hint and mobile-nav offset. | The form fits the viewport (put the `SubmitButton` at the end) or the actions belong to a dialog (`DialogFooter`). | `<div class="sticky bottom-0">` | [SubmitButton](#actions), [BulkActionBar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/sticky-action-bar.stories.tsx) |
119
119
  | **NewMenu** (deprecated) (`/legacy`)<br>since 1.2.0 | The "+ New" creation menu of an app: grouped actions with icons and shortcuts on a `DropdownMenu`. | The menu is contextual to one record (`DropdownMenu`) or has a single action (`Button`). | — | [DropdownMenu](#overlays), [AppHeader](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/new-menu.stories.tsx) |
120
- | **DisplayMenu**<br>since 1.25.0 | The Linear-style Display control of a list surface: filters, grouping, ordering and column visibility in one searchable menu, driven by a `sections` array. | There is one filter (`FilterChip`) or one multi-value filter (`MultiFilterPill`). | — | [Toolbar](#actions), [MultiFilterPill](#selection), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/display-menu.stories.tsx) |
120
+ | **DisplayMenu**<br>also: `detectDisplayMenuDatePreset`, `isDisplayMenuSectionActive`, `matchesDisplayMenuDate`, `matchesDisplayMenuNumber`, `matchesDisplayMenuOperator`, `matchesDisplayMenuTags`, `matchesDisplayMenuText`, `parseDisplayMenuNumber`, `resolveDisplayMenuDatePreset`, `summarizeDisplayMenuSection`<br>since 1.25.0 | The Linear-style Display control of a list surface: filters (value lists with operators and faceted counts, person, tags, date presets, number, text, boolean), ordering (multi-key sort), grouping, columns (show/hide, reorder) and density in one searchable menu with Filter / Arrange headings, driven by a `sections` array. Pair with `FilterChips` (`useDisplayMenuFilterChips`) for the active-filter row. | There is one filter (`FilterChip`) or one multi-value filter (`MultiFilterPill`). | — | [Toolbar](#actions), [MultiFilterPill](#selection), [DataTableView](#data-display), [FilterChips](#actions), [ListPage](#layout), [TableDensityToggle](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/display-menu.stories.tsx) |
121
121
  | **Toolbar**<br>parts: `FilterChip`<br>also: `filterChipVariants`<br>since 0.3.0 | The row of controls above a list or dashboard; `FilterChip` for a single-value filter toggle inside it. Controls share one control size so the row reads as one line. | The controls belong to a table card (`DataTableToolbar`) or the filter is multi-value (`MultiFilterPill`). | `<div class="flex items-center gap-2"> above a list` | [MultiFilterPill](#selection), [DisplayMenu](#actions), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/toolbar.stories.tsx) |
122
122
  | **SuggestionPills** (deprecated) (`/legacy`)<br>since 1.5.0 | A strip of AI quick-reply pills floated above a composer; renders nothing when empty and not loading, so mount it unconditionally. | The choices are a form value (`MultiSelectField`) or filters (`FilterChip`). | — | [MessageComposer](#forms), [AiDraftCard](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/suggestion-pills.stories.tsx) |
123
+ | **FilterChips** (experimental)<br>also: `useDisplayMenuFilterChips`<br>since unreleased | The active-filter row right of a list's search box: one chip per facet ("Status: Active, Draft"); the chip body asks to edit the facet (reopen its Display flyout), × removes it; past `maxVisible` facets the rest collapse into a "+N" chip with a per-value popover; trailing "Clear all". Derive props from DisplayMenu sections with `useDisplayMenuFilterChips`. | A single on/off filter toggle in a toolbar (`FilterChip`) or a dismissible tag that is not a filter (`Chip` with `onRemove`). | `<div class="flex gap-1"> of hand-rolled filter pills with × buttons` | [DisplayMenu](#actions), [ListPage](#layout), [Chip](#selection), [Toolbar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/filter-chips.stories.tsx) |
123
124
 
124
125
  ## Forms
125
126
 
@@ -265,6 +266,7 @@ Arrange content: stacks, surfaces, cards, separators, section and page framing.
265
266
  | **DashGrid** (deprecated) (`/legacy`)<br>since 1.2.0 | A dashboard of reorderable widgets in 2–4 columns with the order persisted under `storageKey`. | A static grid of cards (CSS grid of `Card`s). | — | [KpiCard](#data-display), [Card](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/legacy/dash-grid.stories.tsx) |
266
267
  | **RouteTransition**<br>since 1.3.0 | Fade and slide a page panel in when `routeKey` changes; respects reduced motion. | Animating a component's own presence (the overlays already do) or a list (leave static). | — | [Shell](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/route-transition.stories.tsx) |
267
268
  | **VisuallyHidden**<br>since 0.0.0 | Text for assistive technology that must not be seen: the name of an icon-only control you compose yourself, a live-region message. | Hiding from everyone (`hidden`) or an `IconButton` (it names itself). | `class="sr-only"` | [IconButton](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/visually-hidden.stories.tsx) |
269
+ | **ListPage** (experimental)<br>parts: `ListPageToolbar`, `ListPageResultCount`, `ListPageTable`, `ListPageScroll`<br>since unreleased | A list screen: full available height and never scrolls itself; stats, a toolbar (search left, filter chips, spacer, result count, actions), a table card that is the only scroll region (sticky header, pinned footer, shrinks to short content) and a bulk bar. | A table embedded in a detail page or card (Table / DataTable directly), or a page whose body is not one list. | `<div class="flex h-full flex-col overflow-hidden"> around a toolbar and an overflow-auto table` | [DataTable](#data-display), [FilterChips](#actions), [DisplayMenu](#actions), [BulkActionBar](#actions), [Table](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/list-page.stories.tsx) |
268
270
 
269
271
  ## Typography
270
272
 
@@ -289,15 +291,16 @@ Show records and status: tables, key/value grids, badges, dots, avatars, lists a
289
291
  | **InfoHint** (experimental)<br>since unreleased | The ⓘ beside a label or a figure (W7-15): `label` names what the hint is about, `children` is the explanation, `presentation="tooltip"` (default) or `"popover"` for an explanation with a paragraph or a link. The trigger is a real `IconButton`, so the hint is reachable by keyboard and by touch. | The text belongs in the layout (`FieldDescription` under a field) or the surface is a rich hover preview (`HoverCard`). | `<svg title>`, `<span title>` | [Tooltip](#overlays), [Popover](#overlays), [IconButton](#actions), [FieldDescription](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/patterns/display/info-hint.stories.tsx) |
290
292
  | **AvatarGroup**<br>since 1.38.0 | An overlapping stack of `Avatar`s with a `+N` overflow bubble: `max` caps the faces, `total` carries the real count, `size` cascades from Avatar's scale. | A single person (`Avatar`) or a list that needs names (`DescriptionList`). | `flex row of avatars with negative margins and a +N circle` | [Avatar](#data-display), [TeamMemberSelect](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/avatar-group.stories.tsx) |
291
293
  | **StarRating**<br>also: `starRatingVariants`<br>since 0.0.0 | A display-only rating: fractional stars, `max`, sized variants. | Capturing a rating (compose `RadioGroup` or `ToggleGroup` with star icons). | — | [Badge](#data-display), [KpiCard](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/star-rating.stories.tsx) |
292
- | **Table**<br>parts: `TableHeader`, `TableBody`, `TableFooter`, `TableRow`, `TableHead`, `TableCell`, `TableCaption`, `TableGroupRow`<br>since 0.0.0 | A bare semantic table with the design system's row, header and caption styling. | A records table with toolbar, sorting and pagination (`DataTable`, `DataTableView`) or an editable matrix (`Grid`). | `<table>`, `<tr>`, `<td>`, `<th>` | [DataTable](#data-display), [DataTableView](#data-display), [MetadataGrid](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/table.stories.tsx) |
294
+ | **Table**<br>parts: `TableHeader`, `TableBody`, `TableFooter`, `TableRow`, `TableHead`, `TableCell`, `TableCaption`, `TableGroupRow`, `TableCellSecondary`<br>since 0.0.0 | A bare semantic table with the design system's row, header and caption styling. | A records table with toolbar, sorting and pagination (`DataTable`, `DataTableView`) or an editable matrix (`Grid`). | `<table>`, `<tr>`, `<td>`, `<th>` | [DataTable](#data-display), [DataTableView](#data-display), [MetadataGrid](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/table.stories.tsx) |
293
295
  | **TableDensityToggle** (experimental)<br>also: `useTableDensity`<br>since unreleased | A table's own toolbar control for row density — pairs with `useTableDensity` and `<Table density>`. Two icon items, "Detailed" and "Compact", each with an accessible name and a tooltip. | A generic view-mode switch unrelated to table rows (ToggleGroup directly, or SegmentedControl). | — | [Table](#data-display), [ToggleGroup](#selection) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/table-density-toggle.stories.tsx) |
294
- | **DataTable**<br>parts: `DataTableToolbar`, `DataTableSearch`, `DataTableSpacer`, `DataTableResultsCount`, `DataTableHead`, `DataTableHeader`, `DataTableBody`, `DataTableRow`, `DataTableCell`, `DataTableCellName`, `DataTableCellMono`, `DataTableCellId`, `DataTableCellDue`, `DataTableCheckbox`, `DataTablePagination`<br>since 0.3.0 | The composable records table: card frame, toolbar with search and count, sortable headers, typed cells (name, mono, id, due), row checkbox, pagination. | A config-driven table is enough (`DataTableView`) or the table is a plain semantic one (`Table`). | `<table> + hand-rolled toolbar and pager` | [DataTableView](#data-display), [Table](#data-display), [BulkActionBar](#actions), [LoadingRows](#feedback), [TableLoading](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table.stories.tsx) |
296
+ | **DataTable**<br>parts: `DataTableToolbar`, `DataTableSearch`, `DataTableSpacer`, `DataTableResultsCount`, `DataTableHead`, `DataTableHeader`, `DataTableBody`, `DataTableRow`, `DataTableCell`, `DataTableCellName`, `DataTableCellMono`, `DataTableCellId`, `DataTableCellDue`, `DataTableCheckbox`, `DataTablePagination`, `DataTableCellSecondary`<br>since 0.3.0 | The composable records table: card frame, toolbar with search and count, sortable headers, typed cells (name, mono, id, due), row checkbox, pagination. | A config-driven table is enough (`DataTableView`) or the table is a plain semantic one (`Table`). | `<table> + hand-rolled toolbar and pager` | [DataTableView](#data-display), [Table](#data-display), [BulkActionBar](#actions), [LoadingRows](#feedback), [TableLoading](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table.stories.tsx) |
295
297
  | **TableLoading** (experimental)<br>since 1.38.0 | The `<tbody aria-busy>` of a data table while its rows load: skeleton rows sized to the columns. Slots in place of `DataTableBody`. | A list outside a table (`LoadingRows`) or a single shape (`Skeleton`). | `<tbody> of hand-rolled skeleton <td>s` | [TableEmpty](#data-display), [TableError](#data-display), [DataTable](#data-display), [LoadingRows](#feedback) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-states.stories.tsx) |
296
298
  | **TableEmpty** (experimental)<br>since 1.38.0 | The `<tbody>` of a data table with no rows: one full-width row holding a compact `EmptyState`. | An empty panel outside a table (`EmptyState`). | `<tr><td colSpan> with centred grey text` | [TableLoading](#data-display), [TableError](#data-display), [EmptyState](#feedback), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-states.stories.tsx) |
297
299
  | **TableError** (experimental)<br>since 1.38.0 | The `<tbody>` of a data table whose rows failed to load: one full-width row holding a compact `ErrorState` with retry. | An error panel outside a table (`ErrorState`). | `<tr><td colSpan> with an error message and a retry button` | [TableLoading](#data-display), [TableEmpty](#data-display), [ErrorState](#feedback), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-states.stories.tsx) |
298
300
  | **DataTableView**<br>parts: `StagePill` (`/legacy`) (deprecated), `Assignee` (`/legacy`) (deprecated), `MoneyCell` (`/legacy`) (deprecated), `TagsCell` (`/legacy`), `Dash` (`/legacy`) (deprecated)<br>since 1.6.0 | A list screen as configuration: `columns` + `data` (+ filters, search keys, sort); owns search/filter/sort/pagination state. Cell renderers `StagePill`, `Assignee`, `MoneyCell`, `TagsCell`, `Dash` for `column.render`. | You need custom table composition (`DataTable`). | — | [DataTable](#data-display), [DisplayMenu](#actions), [Toolbar](#actions) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-view.stories.tsx) |
299
301
  | **MetadataGrid**<br>parts: `DataItem`<br>since 0.4.1 | Label / value pairs on a detail surface as a semantic `<dl>`; `DataItem span={2}` for full-row values. | Tabular records (`Table`) or a stat tile (`KpiCard`). | `<dl>`, `two-column label/value divs` | [DetailGrid](#layout), [Table](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/metadata-grid.stories.tsx) |
300
302
  | **KpiCard**<br>parts: `SelectableKpiCard`<br>since 0.4.1 | A single-stat dashboard tile: label, value, optional tone, icon and hint; `SelectableKpiCard` when tiles act as filters. | A number inside running content (`Stat`) or a chart (`DonutChart`). | — | [Stat](#typography), [DashGrid](#layout), [Card](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/kpi-card.stories.tsx) |
303
+ | **StatStrip** (experimental)<br>parts: `StatStripItem`<br>since unreleased | The headline numbers above a list or board: one joined card of cells (label, big value, optional meter, one-line caption), collapsible to one line and remembered per browser; cells can act as filter toggles. | A dashboard of independent tiles (`KpiCard` in a `DashGrid`) or one number inside running content (`Stat`). | `hand-rolled grid of KPI <div>s above a table` | [KpiCard](#data-display), [SelectableKpiCard](#data-display), [ProgressBar](#feedback), [DataTable](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/stat-strip.stories.tsx) |
301
304
  | **Badge**<br>also: `badgeVariants`, `resolveBadgeAppearance`<br>since 0.0.0 | A short static label or count: `variant` (solid, soft, outline) × `intent`. | A status with a shared vocabulary (`StatusBadge`), a removable token (`Chip`) or a machine-suggested intent (`IntentBadge`). | `<span class="rounded-full px-2 text-xs">` | [StatusBadge](#data-display), [Chip](#selection), [IntentBadge](#data-display), [StatusDot](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/badge.stories.tsx) |
302
305
  | **StatusBadge**<br>also: `defineStatusMap`<br>since 1.35.0 | The presentation of a status: soft badge, indicator dot, icon; define the product's statuses once with `defineStatusMap` and spread an entry onto it. | A count or neutral label (`Badge`) or a stage pill inside `DataTableView` (`StagePill`). | — | [Badge](#data-display), [StatusDot](#data-display), [StatusPill](#data-display), [DataTableView](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/status-badge.stories.tsx) |
303
306
  | **StatusPill** (`/legacy`)<br>since 1.2.0 | Only in code that already uses it: the fixed-vocabulary pill (`status`, optional dot) for authoritative state. | New code — `StatusBadge` with `defineStatusMap`. | — | [StatusBadge](#data-display), [IntentBadge](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/status-pill.stories.tsx) |
@@ -325,6 +328,8 @@ Show records and status: tables, key/value grids, badges, dots, avatars, lists a
325
328
  | **Proposal content** (`/suite`)<br>parts: `ProposalNote` (`/suite`), `ProposalCustomPage` (`/suite`)<br>since 1.12.0 | The content blocks of a proposal: signer list, notes, custom pages. | Anything outside a proposal. | — | [AgreementViewer](#shell-screens), [ProposalPackageCard](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/proposal-content.stories.tsx) |
326
329
  | **DataTable (compound)** (experimental)<br>since unreleased | A records table driven by `useDataTable`: the toolbar with a labelled search, filters and a column-visibility menu, the table on the `Table*` parts with sort and selection wired to the controller, bulk actions, the merged pager and the built-in loading / empty / error bodies. `classNames.search` and `--ds-data-table-search-width` size the search field. | A table with no state (the `Table` parts alone), the hand-written `DataTable*` parts a product already composes, or the config-driven convenience (`DataTableView`). | `hand-rolled toolbar + <table> + pager around per-table useState` | [useDataTable](#hooks-utilities), [Table](#data-display), [DataTable](#data-display), [DataTableView](#data-display), [Pagination](#navigation), [BulkActionBar](#actions), [TableLoading](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/patterns/data/data-table.stories.tsx) · [docs](https://github.com/Assure-One/design-system/blob/main/docs/data-tables.md) |
327
330
  | **EmptyValue** (experimental)<br>since unreleased | A table or detail cell has no value: renders the em dash placeholder consistently. | The value is genuinely empty text a user typed — render it as-is. | `<span>—</span>` | — | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/data-table-view.stories.tsx) |
331
+ | **DataTableHeaderMenu** (experimental)<br>since unreleased | A column's options menu in a header cell's `menu` slot: sort ascending / descending / clear, move left / right, hide, pin, autosize, reset columns — each item only when its callback is given. | A table-wide column picker (DisplayMenu columns section) or row actions (DropdownMenu in a cell). | — | [Table](#data-display), [DataTable](#data-display), [DisplayMenu](#actions) | — |
332
+ | **DataTableLoadMore** (experimental)<br>parts: `DataTableSpacerRow`<br>also: `useDataTableVirtualRows`, `useScrollRestoration`<br>since unreleased | The foot of a virtualised infinite list: an IntersectionObserver sentinel plus a visible "Load more" button and an end-of-list status; `useDataTableVirtualRows` windows the rows with spacer rows, `useScrollRestoration` returns the user to the same rows. | A paged list (DataTablePagination) or a short list that renders every row. | — | [DataTable](#data-display), [ListPage](#layout), [Table](#data-display) | — |
328
333
 
329
334
  ## Media
330
335
 
@@ -339,6 +344,7 @@ Charts, previews and brand artwork.
339
344
  | **PdfPreview**<br>since 1.7.0 | Render a PDF inline with paging and zoom. | A spreadsheet (`SpreadsheetPreview`) or just a file row (`AttachmentChip`). | — | [SpreadsheetPreview](#media), [AttachmentChip](#data-display), [AspectRatio](#layout) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/pdf-preview.stories.tsx) |
340
345
  | **SpreadsheetPreview**<br>since 1.7.0 | Render a spreadsheet's sheets and cells inline. | A PDF (`PdfPreview`) or an editable grid (`Grid`). | — | [PdfPreview](#media), [Table](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/spreadsheet-preview.stories.tsx) |
341
346
  | **Logo** (`/suite`)<br>since 0.0.0 | The Assure suite or product wordmark: official artwork with a glyph + text fallback; `assetPath` resolves the artwork base. | A small product mark alone (brand icon family). | `<img src="/brand/….svg">` | [Sidebar](#shell-screens), [assetPath](#hooks-utilities) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/logo.stories.tsx) |
347
+ | **TaxSoftwareLogo** (`/suite`)<br>since 1.48.0 | Identifying a professional tax-software product (CCH Axcess, UltraTax CS, ATX, TaxAct, ProConnect, ProSeries, Lacerte, Drake) beside its name in a connect / import / export picker: the vendor's official mark on a white plate, initials `Avatar` fallback for vendors without one. | An Assure product mark (`Logo`, brand icon family), any other third-party brand, or a generic glyph (icon catalogue). | `<img src="…vendor-logo.svg">`, `<svg> (vendor mark)` | [Avatar](#data-display), [Logo](#media) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/tax-software-logo.stories.tsx) |
342
348
 
343
349
  ## Icons
344
350
 
@@ -382,7 +388,7 @@ The application frame and full-screen composites: shell, sidebar, header, brand
382
388
  | Component | Use when | Don't use when | Replaces raw HTML | Related | Links |
383
389
  | --- | --- | --- | --- | --- | --- |
384
390
  | **Shell**<br>parts: `Main`, `Content`<br>since 0.3.0 | The application frame: `Shell` holds the `Sidebar` and `Main`; `Main` holds `AppHeader` and `Content`. | A public or marketing page (`Section`). | `<div class="flex h-screen">` | [Sidebar](#shell-screens), [AppHeader](#shell-screens), [BrandScope](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/shell.stories.tsx) |
385
- | **Sidebar**<br>parts: `SidebarProvider`, `SidebarTrigger`, `SidebarBrand`, `SidebarBrandText`, `SidebarSection`, `SidebarLinkGroup`, `SidebarLink`, `SidebarLinkLabel`, `SidebarLinkBadge`, `SidebarLinkAction`, `SidebarPinButton`, `SidebarUser`, `SidebarFooter`<br>also: `sidebarLinkBadgeVariants`, `useSidebarState`, `useSidebarPeekLock`<br>since 0.3.0 | The app navigation rail: expanded/collapsed/peek states from `SidebarProvider`, brand, sections, link groups with badges and actions, user and footer. | Mobile (`BottomNav`) or a rail of records (`ClientRailItem`). | `<aside> + <nav> hand-rolled` | [Shell](#shell-screens), [SidebarBrandSwitcher](#shell-screens), [BottomNav](#navigation), [SidebarDrawer](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/sidebar.stories.tsx) |
391
+ | **Sidebar**<br>parts: `SidebarProvider`, `SidebarTrigger`, `SidebarBrand`, `SidebarBrandText`, `SidebarSection`, `SidebarLinkGroup`, `SidebarLink`, `SidebarLinkLabel`, `SidebarLinkBadge`, `SidebarLinkAction`, `SidebarPinButton`, `SidebarUser`, `SidebarFooter`<br>also: `sidebarLinkBadgeVariants`, `useSidebarState`, `useSidebarPeekLock`<br>since 0.3.0 | The app navigation rail: two states (expanded / collapsed icon rail) from `SidebarProvider`, brand, sections, link groups with badges and actions, user and footer. | Mobile (`BottomNav`) or a rail of records (`ClientRailItem`). | `<aside> + <nav> hand-rolled` | [Shell](#shell-screens), [SidebarBrandSwitcher](#shell-screens), [BottomNav](#navigation), [SidebarDrawer](#shell-screens) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/sidebar.stories.tsx) |
386
392
  | **SidebarBrandSwitcher** (`/suite`)<br>parts: `SidebarBrandSwitcherTile` (`/suite`)<br>since 0.11.2 | Switch between Assure products from the sidebar brand slot: tiles for available, current and coming-soon products. | A single-product app (`SidebarBrand`). | — | [Sidebar](#shell-screens), [BrandScope](#shell-screens), [Logo](#media) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/sidebar-brand-switcher.stories.tsx) |
387
393
  | **AppHeader**<br>parts: `AppHeaderBreadcrumb`, `AppHeaderTitle`, `AppHeaderSearch`, `AppHeaderActions`<br>since 0.3.0 | The sticky 56px top bar inside `Main`: breadcrumb, title, search and actions slots in any order. | The page's own title block (`PageHeader`). | — | [Shell](#shell-screens), [PageHeader](#layout), [NewMenu](#actions), [NotificationPanel](#data-display) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/app-header.stories.tsx) |
388
394
  | **DesignSystemProvider** (experimental)<br>also: `useDsMessages`<br>since unreleased | Mount once in the root layout to configure the whole design system: `messages` overrides for the generic strings components render, `locale` (default `en-US`, pass the one your app knows server-side), `dir`, the portal container, the router `linkComponent` and `imageComponent` for `LinkButton` and `Logo`, the tooltip provider, and opt-in `toasts` / `confirm` regions. `useDsMessages(namespace, override?)` reads the resolved strings inside your own components. | You are on Next.js — `NextDesignSystemProvider` from `/next` fills in the adapters. Theming a subtree is `ThemeScope` / `BrandScope`, not a nested provider. | `hand-rolled i18n or router context for design-system strings and links` | [ThemeScope](#shell-screens), [BrandScope](#shell-screens), [Tooltip](#overlays), [LinkButton](#actions), [Logo](#media) | [story](https://github.com/Assure-One/design-system/blob/main/src/foundation/provider/design-system-provider.stories.tsx) |
@@ -403,6 +409,7 @@ Non-rendering exports: hooks, class-name helpers, formatters and token objects.
403
409
  | **QUESTION_TYPE_CONTRACT_VERSION** (experimental) (`/suite`)<br>since 1.39.0 | Check which version of the question-type contract the installed DS implements before trusting a stored questionnaire. | Rendering a question — use `Questions` / `QuestionnairePanel`. | — | [QUESTION_TYPES](#hooks-utilities), [Questions](#forms) | [story](https://github.com/Assure-One/design-system/blob/main/src/composites/questions.stories.tsx) |
404
410
  | **cn**<br>since 0.0.0 | Merge class names (clsx + tailwind-merge) when composing `className`; consumer classes still win by cascade, `cn` only dedupes. | Overriding a component part — pass `className`/`classNames` instead of rebuilding its classes. | — | [Button](#actions) | [docs](https://github.com/Assure-One/design-system/blob/main/docs/integration/css.md) |
405
411
  | **Data-table controller** (experimental)<br>also: `compareSortValues`, `nextSortDirection`<br>since unreleased | Building a data table: owns sorting, pagination, search, selection, column visibility and filters (each controllable or uncontrolled), derives the rows to render, and in `manual` mode only emits state for a server-driven table. | A static table with no state (the `Table` parts alone), or the data-driven convenience (`DataTableView`) once it is rebuilt on the hook. | — | [Table](#data-display), [DataTable](#data-display), [DataTableView](#data-display), [Pagination](#navigation) | [story](https://github.com/Assure-One/design-system/blob/main/src/primitives/behavior/data-table/use-data-table.stories.tsx) · [docs](https://github.com/Assure-One/design-system/blob/main/docs/data-tables.md) |
412
+ | **Data-table grouping** (experimental)<br>also: `DATA_TABLE_NO_GROUPING`<br>since unreleased | A table grouped by one dimension (a DisplayMenu grouping section's value): partitions rows into groups, flattens group headers and the rows of open groups for `TableGroupRow` and `useDataTableVirtualRows`, with collapse state controllable or persisted per dimension. | An ungrouped table, or groups the server already returns as sections (render `TableGroupRow` from that data). | — | [useDataTable](#hooks-utilities), [TableGroupRow](#data-display), [DisplayMenu](#actions), [DataTableLoadMore](#data-display) | — |
406
413
  | **useFieldControl** (experimental)<br>since 1.32.0 | Building your own form control that should bind to `Field` like the design-system ones: returns ids, `aria-*`, invalid/disabled/required wiring; explicit props win. | Wrapping an existing element once (`FieldControl`). | — | [Field](#forms), [FieldControl](#forms) | [docs](https://github.com/Assure-One/design-system/blob/main/docs/adr/006-field-native-form-participation.md) |
407
414
  | **Date utilities**<br>also: `displayToIso`, `applyMask`, `applyYearMask`, `isoToDate`, `dateToIso`, `isoToYear`, `yearToIso`, `DATE_DISPLAY_PLACEHOLDER`, `YEAR_DISPLAY_PLACEHOLDER`<br>since 0.11.0 | Convert between ISO `YYYY-MM-DD`, the `MM/DD/YYYY` display format and JS `Date` the way `DatePicker` does, and apply its typing masks. | Locale-aware formatting for display text (`Intl.DateTimeFormat`). | — | [DatePicker](#forms), [DateRangePicker](#forms) | — |
408
415
  | **Country codes**<br>also: `getFlagEmoji`, `parsePhoneForEditing`<br>since 1.1.0 | The ISO country / dial-code table behind `PhoneCountryInput`, a flag emoji fallback, and splitting a stored phone string for editing. | Full phone validation (bring libphonenumber). | — | [PhoneField](#forms), [PhoneCountryInput](#forms) | — |
@@ -430,6 +437,8 @@ The raw element or pattern on the left already has a design-system component. Wr
430
437
  | `<div class="border-t">` | [Separator](#layout) |
431
438
  | `<div class="flex flex-col gap-4">` | [Stack](#layout) |
432
439
  | `<div class="flex flex-wrap items-center gap-2">` | [Inline](#layout) |
440
+ | `<div class="flex gap-1"> of hand-rolled filter pills with × buttons` | [FilterChips](#actions) |
441
+ | `<div class="flex h-full flex-col overflow-hidden"> around a toolbar and an overflow-auto table` | [ListPage](#layout) |
433
442
  | `<div class="flex h-screen">` | [Shell](#shell-screens) |
434
443
  | `<div class="flex items-center gap-2"> above a list` | [Toolbar](#actions) |
435
444
  | `<div class="flex items-center justify-between"><h1>` | [PageHeader](#layout) |
@@ -454,6 +463,7 @@ The raw element or pattern on the left already has a design-system component. Wr
454
463
  | `<hr>` | [Separator](#layout) |
455
464
  | `<img class="rounded-full">` | [Avatar](#data-display) |
456
465
  | `<img src="…logo.svg">` | [Brand icons](#icons) |
466
+ | `<img src="…vendor-logo.svg">` | [TaxSoftwareLogo](#media) |
457
467
  | `<img src="/brand/….svg">` | [Logo](#media) |
458
468
  | `<input list> + <datalist>` | [Combobox](#selection) |
459
469
  | `<input type="button">` | [Button](#actions) |
@@ -499,6 +509,7 @@ The raw element or pattern on the left already has a design-system component. Wr
499
509
  | `<span>—</span>` | [EmptyValue](#data-display) |
500
510
  | `<svg title>` | [InfoHint](#data-display) |
501
511
  | `<svg>` | [Icons](#icons) |
512
+ | `<svg> (vendor mark)` | [TaxSoftwareLogo](#media) |
502
513
  | `<table>` | [Table](#data-display) |
503
514
  | `<table> + hand-rolled toolbar and pager` | [DataTable](#data-display) |
504
515
  | `<table> of <input>s` | [Grid](#forms) |
@@ -528,6 +539,7 @@ The raw element or pattern on the left already has a design-system component. Wr
528
539
  | `flex row of avatars with negative margins and a +N circle` | [AvatarGroup](#data-display) |
529
540
  | `group of <button aria-pressed>` | [ToggleGroup](#selection) |
530
541
  | `hand-rolled assignee popover with checkboxes` | [PeoplePicker](#selection) |
542
+ | `hand-rolled grid of KPI <div>s above a table` | [StatStrip](#data-display) |
531
543
  | `hand-rolled i18n or router context for design-system strings and links` | [DesignSystemProvider](#shell-screens) |
532
544
  | `hand-rolled toast portal` | [ToastProvider](#feedback) |
533
545
  | `hand-rolled toolbar + <table> + pager around per-table useState` | [DataTable (compound)](#data-display) |
@@ -555,7 +567,7 @@ The raw element or pattern on the left already has a design-system component. Wr
555
567
 
556
568
  ## Deprecated aliases and their replacements
557
569
 
558
- Every deprecated name keeps rendering exactly what it did (zero visual diff) until 3.0. The codemod column names the transform in [`codemods/README.md`](../codemods/README.md) that rewrites call sites (`node node_modules/@assure-one/design-system/codemods/run.mjs <id> src`); a dash means the change is a hand edit. Deprecated exports in the API report: `ArrowRightSmallIcon`, `CloseIcon`, `CountryFlag`, `CountrySelect`, `FormError`, `FormSection`, `FormSuccess`, `PhoneCountryInput`, `PhoneInput`, `SearchSelect`, `SideDrawer`.
570
+ Every deprecated name keeps rendering exactly what it did (zero visual diff) until 3.0. The codemod column names the transform in [`codemods/README.md`](../codemods/README.md) that rewrites call sites (`node node_modules/@assure-one/design-system/codemods/run.mjs <id> src`); a dash means the change is a hand edit. Deprecated exports in the API report: `ArrowRightSmallIcon`, `CloseIcon`, `CountryFlag`, `CountrySelect`, `FormError`, `FormSection`, `FormSuccess`, `PhoneCountryInput`, `PhoneInput`, `SearchSelect`, `SideDrawer`, `useSidebarPeekLock`.
559
571
 
560
572
  | Deprecated | Use instead | Codemod | Contract |
561
573
  | --- | --- | --- | --- |