@rivet-health/design-system 40.6.1 → 40.7.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.
@@ -2047,28 +2047,45 @@ var RivSelect;
2047
2047
  * determined by the option's ID rather than the object reference.
2048
2048
  */
2049
2049
  class OptionSet extends Set {
2050
+ constructor(values) {
2051
+ super();
2052
+ // Parallel id → option map so has()/add()/delete() are O(1) instead of
2053
+ // spreading the Set and linear-scanning it. Rebuilding an O(N²) lookup
2054
+ // for a 16k-option selection was the primary cause of the multi-minute
2055
+ // freeze that surfaced RVT-25383's tree-select scale problem.
2056
+ this.byId = new Map();
2057
+ if (values) {
2058
+ for (const value of values) {
2059
+ this.add(value);
2060
+ }
2061
+ }
2062
+ }
2050
2063
  has(option) {
2051
- return !![...this].find(o => o.id === option.id);
2064
+ return this.byId.has(option.id);
2052
2065
  }
2053
2066
  add(option) {
2054
- if (this.has(option)) {
2055
- // The Set already has some version of this option, but we'll make sure
2056
- // it has the most recent object reference (while keeping insertion
2057
- // order consistent).
2058
- const newOptions = [...this].map(o => o.id === option.id ? option : o);
2059
- this.clear();
2060
- newOptions.forEach(o => {
2061
- super.add(o);
2062
- });
2067
+ if (this.byId.has(option.id)) {
2068
+ // Preserve insertion order while swapping to the newer object
2069
+ // reference. Rebuilding the full Set matches the previous
2070
+ // implementation's semantics; the cost of that rebuild only hits
2071
+ // the rare "re-add existing" path — the common O(N²) case (fresh
2072
+ // adds during construction) no longer pays it.
2073
+ const items = [...this].map(o => (o.id === option.id ? option : o));
2074
+ this.byId.set(option.id, option);
2075
+ super.clear();
2076
+ for (const item of items)
2077
+ super.add(item);
2063
2078
  }
2064
2079
  else {
2080
+ this.byId.set(option.id, option);
2065
2081
  super.add(option);
2066
2082
  }
2067
2083
  return this;
2068
2084
  }
2069
2085
  delete(option) {
2070
- const existing = [...this].find(o => o.id === option.id);
2086
+ const existing = this.byId.get(option.id);
2071
2087
  if (existing) {
2088
+ this.byId.delete(option.id);
2072
2089
  super.delete(existing);
2073
2090
  return true;
2074
2091
  }
@@ -2076,6 +2093,10 @@ var RivSelect;
2076
2093
  return false;
2077
2094
  }
2078
2095
  }
2096
+ clear() {
2097
+ this.byId.clear();
2098
+ super.clear();
2099
+ }
2079
2100
  }
2080
2101
  RivSelect.OptionSet = OptionSet;
2081
2102
  const MIN_OPTIONS_FOR_CONTROLS = 5;
@@ -2747,7 +2768,7 @@ var RivSelect;
2747
2768
  }
2748
2769
  function toggleVisibleSelected(state) {
2749
2770
  const leaves = flattenOptions(getTopLevelOptions(state.sourceOptionGroups), true);
2750
- const isAllSelected = leaves.every(leaf => [...state.selection.selected].map(({ id }) => id).includes(leaf.id));
2771
+ const isAllSelected = leaves.every(leaf => state.selection.selected.has(leaf));
2751
2772
  const newSelection = new OptionSet(state.selection.selected);
2752
2773
  for (const leaf of leaves) {
2753
2774
  if (isAllSelected)
@@ -5392,6 +5413,185 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5392
5413
  type: Input
5393
5414
  }] } });
5394
5415
 
5416
+ /**
5417
+ * A borderless heading with a click-to-edit title and an optional
5418
+ * click-to-edit description, plus a projected slot for actions.
5419
+ *
5420
+ * Layout: `[title] | [description] [actions]`
5421
+ *
5422
+ * - Click the title to rename; click the description (or the ghost
5423
+ * "+ Add description" button when empty) to edit it.
5424
+ * - Only one of title or description can be edited at a time.
5425
+ * - While either is being edited, the `[actions]` slot is hidden so
5426
+ * projected controls don't compete with the edit affordance.
5427
+ *
5428
+ * Commit semantics: `titleChange` / `descriptionChange` fire when the user
5429
+ * commits — Enter, outside click, or the Check button — not on every
5430
+ * keystroke, and always on commit (even when the value is unchanged). The
5431
+ * "commit" framing over "change" is deliberate: consumers that persist on
5432
+ * commit (analytics, PATCH) treat the gesture itself as the event; those
5433
+ * that only care about diffs can compare `next === current` in the handler.
5434
+ * There is no cancel path.
5435
+ *
5436
+ * Outside-click commits (rather than cancels) to match the established DS
5437
+ * interaction pattern in `riv-date` and `riv-select`. If a future consumer
5438
+ * needs an abandon path, the soft first step is Escape-to-cancel rather
5439
+ * than changing outside-click's meaning.
5440
+ *
5441
+ * Value handling follows the same convention as `riv-text-field`: `[title]`
5442
+ * and `[description]` are treated as suggestions, not authoritative state.
5443
+ * On commit, the component keeps displaying the user's committed value,
5444
+ * and only overwrites its internal state when the parent explicitly sends
5445
+ * a different value. That lets the component demo out of the box (e.g. in
5446
+ * Storybook) without requiring a round trip through the parent.
5447
+ *
5448
+ * The component owns no border, background, or card chrome — consumers who
5449
+ * want a bordered container should wrap it.
5450
+ *
5451
+ * ```html
5452
+ * <riv-editable-heading
5453
+ * [title]="report.title"
5454
+ * [description]="report.description"
5455
+ * (titleChange)="onTitleCommit($event)"
5456
+ * (descriptionChange)="onDescriptionCommit($event)"
5457
+ * >
5458
+ * <riv-menu actions>
5459
+ * <ng-template #trigger>
5460
+ * <button rivButton [icon]="'MoreVertical'" [variant]="'ghost'"></button>
5461
+ * </ng-template>
5462
+ * <button riv-menu-item>Rename</button>
5463
+ * <button riv-menu-item>Duplicate</button>
5464
+ * </riv-menu>
5465
+ * <button rivButton actions [variant]="'primary'">Save</button>
5466
+ * </riv-editable-heading>
5467
+ * ```
5468
+ */
5469
+ class EditableHeadingComponent {
5470
+ set title(v) {
5471
+ if (v !== this._title)
5472
+ this._title = v;
5473
+ }
5474
+ get title() {
5475
+ return this._title;
5476
+ }
5477
+ set description(v) {
5478
+ if (v !== this._description)
5479
+ this._description = v;
5480
+ }
5481
+ get description() {
5482
+ return this._description;
5483
+ }
5484
+ constructor(cdr, host) {
5485
+ this.cdr = cdr;
5486
+ this.host = host;
5487
+ // See the "Value handling" section of the class-level doc.
5488
+ this._title = '';
5489
+ this._description = '';
5490
+ this.titleMaxLength = 100;
5491
+ this.descriptionMaxLength = 300;
5492
+ this.titleChange = new EventEmitter();
5493
+ this.descriptionChange = new EventEmitter();
5494
+ this.mode = 'view';
5495
+ this.draftTitle = '';
5496
+ this.draftDescription = '';
5497
+ }
5498
+ get isEditing() {
5499
+ return this.mode !== 'view';
5500
+ }
5501
+ startEditingTitle() {
5502
+ this.draftTitle = this.title;
5503
+ this.mode = 'editingTitle';
5504
+ // Defer focus until Angular has rendered the input into the DOM.
5505
+ setTimeout(() => this.focusEnd(this.titleInputRef), 0);
5506
+ }
5507
+ startEditingDescription() {
5508
+ this.draftDescription = this.description;
5509
+ this.mode = 'editingDescription';
5510
+ setTimeout(() => this.focusEnd(this.descriptionInputRef), 0);
5511
+ }
5512
+ commitTitle() {
5513
+ if (this.mode !== 'editingTitle')
5514
+ return;
5515
+ // Title cannot be committed empty. The Check button is disabled in that
5516
+ // state; for Enter and outside-click we revert to the current title so
5517
+ // the user is never stuck in edit mode with a rejected value.
5518
+ if (!this.draftTitle) {
5519
+ this.mode = 'view';
5520
+ return;
5521
+ }
5522
+ const value = this.draftTitle;
5523
+ this._title = value;
5524
+ this.mode = 'view';
5525
+ this.titleChange.emit(value);
5526
+ }
5527
+ commitDescription() {
5528
+ if (this.mode !== 'editingDescription')
5529
+ return;
5530
+ const value = this.draftDescription;
5531
+ this._description = value;
5532
+ this.mode = 'view';
5533
+ this.descriptionChange.emit(value);
5534
+ }
5535
+ // Listens on `mousedown` (not `click`) so the check runs before Angular
5536
+ // re-renders the trigger element out of the DOM — otherwise
5537
+ // `host.contains(target)` returns false for a click that landed on the
5538
+ // now-removed `.title` / `.description` element. Same pattern as
5539
+ // `riv-date`.
5540
+ onDocumentMouseDown(target) {
5541
+ if (this.mode === 'view' || !(target instanceof Element))
5542
+ return;
5543
+ if (this.host.nativeElement.contains(target))
5544
+ return;
5545
+ if (this.mode === 'editingTitle') {
5546
+ this.commitTitle();
5547
+ }
5548
+ else if (this.mode === 'editingDescription') {
5549
+ this.commitDescription();
5550
+ }
5551
+ }
5552
+ // Focus with caret at end (rather than selecting all) so the user can
5553
+ // continue typing where the previous value left off.
5554
+ focusEnd(ref) {
5555
+ const el = ref?.nativeElement;
5556
+ if (!el)
5557
+ return;
5558
+ el.focus();
5559
+ const len = el.value.length;
5560
+ el.setSelectionRange(len, len);
5561
+ this.cdr.markForCheck();
5562
+ }
5563
+ }
5564
+ EditableHeadingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditableHeadingComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
5565
+ EditableHeadingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EditableHeadingComponent, selector: "riv-editable-heading", inputs: { title: "title", description: "description", titleMaxLength: "titleMaxLength", descriptionMaxLength: "descriptionMaxLength" }, outputs: { titleChange: "titleChange", descriptionChange: "descriptionChange" }, host: { listeners: { "document:mousedown": "onDocumentMouseDown($event.target)" }, properties: { "class.editing": "this.isEditing" } }, viewQueries: [{ propertyName: "titleInputRef", first: true, predicate: ["titleInput"], descendants: true }, { propertyName: "descriptionInputRef", first: true, predicate: ["descriptionInput"], descendants: true }], ngImport: i0, template: "<div class=\"leading\">\n <ng-container [ngSwitch]=\"mode\">\n <!-- View mode -->\n <ng-container *ngSwitchDefault>\n <button\n type=\"button\"\n class=\"title\"\n [class.has-description]=\"description\"\n rivTruncate\n aria-label=\"Rename\"\n (click)=\"startEditingTitle()\"\n >\n {{ title || 'Untitled' }}\n </button>\n\n <div class=\"divider\"></div>\n\n <button\n *ngIf=\"description; else addDescription\"\n type=\"button\"\n class=\"description\"\n rivTruncate\n aria-label=\"Edit description\"\n (click)=\"startEditingDescription()\"\n >\n {{ description }}\n </button>\n\n <ng-template #addDescription>\n <div class=\"add-description-wrap\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'xsmall'\"\n [icon]=\"'Plus'\"\n [iconPosition]=\"'first'\"\n type=\"button\"\n (click)=\"startEditingDescription()\"\n >\n Add description\n </button>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Editing title -->\n <ng-container *ngSwitchCase=\"'editingTitle'\">\n <input\n #titleInput\n class=\"title-input\"\n type=\"text\"\n aria-label=\"Title\"\n [value]=\"draftTitle\"\n [attr.maxlength]=\"titleMaxLength\"\n (input)=\"draftTitle = titleInput.value\"\n (keydown.enter)=\"commitTitle()\"\n />\n <button\n rivButton\n type=\"button\"\n class=\"commit\"\n [variant]=\"'primary'\"\n [icon]=\"'Check'\"\n [disabled]=\"!draftTitle\"\n (click)=\"commitTitle()\"\n aria-label=\"Save title\"\n ></button>\n </ng-container>\n\n <!-- Editing description -->\n <ng-container *ngSwitchCase=\"'editingDescription'\">\n <input\n #descriptionInput\n class=\"description-input\"\n type=\"text\"\n aria-label=\"Description\"\n [value]=\"draftDescription\"\n [attr.maxlength]=\"descriptionMaxLength\"\n placeholder=\"Add a description\"\n (input)=\"draftDescription = descriptionInput.value\"\n (keydown.enter)=\"commitDescription()\"\n />\n <button\n rivButton\n type=\"button\"\n class=\"commit\"\n [variant]=\"'primary'\"\n [icon]=\"'Check'\"\n (click)=\"commitDescription()\"\n aria-label=\"Save description\"\n ></button>\n </ng-container>\n </ng-container>\n</div>\n\n<div class=\"actions\" *ngIf=\"!isEditing\">\n <ng-content select=\"[actions]\"></ng-content>\n</div>\n", styles: [":host{display:flex;align-items:stretch;gap:var(--size-large);min-height:calc(var(--base-grid-size) * 8);font:var(--body-medium)}.leading{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:var(--size-small)}.title,.description{padding:0;border:none;background:none;text-align:left;cursor:pointer;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.title{font:var(--stat-xsmall);line-height:calc(var(--base-grid-size) * 4.5);color:var(--type-light-high-contrast);max-width:100%}.title.has-description{width:-moz-fit-content;width:fit-content;max-width:50%;flex-shrink:0}.description{font:var(--input-small);line-height:calc(var(--base-grid-size) * 3.5);color:var(--type-light-low-contrast);flex:1 1 auto}.divider{align-self:stretch;border-right:var(--border-width) solid var(--border-light);margin:0 var(--base-grid-size) 0 0;flex-shrink:0}.add-description-wrap{flex-shrink:0}.title-input,.description-input{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);padding:var(--size-small) var(--size-medium);color:var(--type-light-high-contrast);outline:none;min-width:0}.title-input{font:var(--stat-xsmall);flex:1 1 auto}.description-input{font:var(--input-small);flex:1 1 auto}.title-input:focus,.description-input:focus{border-color:var(--purp-60)}.commit{flex-shrink:0}.actions{display:flex;align-items:center;gap:var(--size-small);flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditableHeadingComponent, decorators: [{
5567
+ type: Component,
5568
+ args: [{ selector: 'riv-editable-heading', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"leading\">\n <ng-container [ngSwitch]=\"mode\">\n <!-- View mode -->\n <ng-container *ngSwitchDefault>\n <button\n type=\"button\"\n class=\"title\"\n [class.has-description]=\"description\"\n rivTruncate\n aria-label=\"Rename\"\n (click)=\"startEditingTitle()\"\n >\n {{ title || 'Untitled' }}\n </button>\n\n <div class=\"divider\"></div>\n\n <button\n *ngIf=\"description; else addDescription\"\n type=\"button\"\n class=\"description\"\n rivTruncate\n aria-label=\"Edit description\"\n (click)=\"startEditingDescription()\"\n >\n {{ description }}\n </button>\n\n <ng-template #addDescription>\n <div class=\"add-description-wrap\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'xsmall'\"\n [icon]=\"'Plus'\"\n [iconPosition]=\"'first'\"\n type=\"button\"\n (click)=\"startEditingDescription()\"\n >\n Add description\n </button>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Editing title -->\n <ng-container *ngSwitchCase=\"'editingTitle'\">\n <input\n #titleInput\n class=\"title-input\"\n type=\"text\"\n aria-label=\"Title\"\n [value]=\"draftTitle\"\n [attr.maxlength]=\"titleMaxLength\"\n (input)=\"draftTitle = titleInput.value\"\n (keydown.enter)=\"commitTitle()\"\n />\n <button\n rivButton\n type=\"button\"\n class=\"commit\"\n [variant]=\"'primary'\"\n [icon]=\"'Check'\"\n [disabled]=\"!draftTitle\"\n (click)=\"commitTitle()\"\n aria-label=\"Save title\"\n ></button>\n </ng-container>\n\n <!-- Editing description -->\n <ng-container *ngSwitchCase=\"'editingDescription'\">\n <input\n #descriptionInput\n class=\"description-input\"\n type=\"text\"\n aria-label=\"Description\"\n [value]=\"draftDescription\"\n [attr.maxlength]=\"descriptionMaxLength\"\n placeholder=\"Add a description\"\n (input)=\"draftDescription = descriptionInput.value\"\n (keydown.enter)=\"commitDescription()\"\n />\n <button\n rivButton\n type=\"button\"\n class=\"commit\"\n [variant]=\"'primary'\"\n [icon]=\"'Check'\"\n (click)=\"commitDescription()\"\n aria-label=\"Save description\"\n ></button>\n </ng-container>\n </ng-container>\n</div>\n\n<div class=\"actions\" *ngIf=\"!isEditing\">\n <ng-content select=\"[actions]\"></ng-content>\n</div>\n", styles: [":host{display:flex;align-items:stretch;gap:var(--size-large);min-height:calc(var(--base-grid-size) * 8);font:var(--body-medium)}.leading{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:var(--size-small)}.title,.description{padding:0;border:none;background:none;text-align:left;cursor:pointer;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.title{font:var(--stat-xsmall);line-height:calc(var(--base-grid-size) * 4.5);color:var(--type-light-high-contrast);max-width:100%}.title.has-description{width:-moz-fit-content;width:fit-content;max-width:50%;flex-shrink:0}.description{font:var(--input-small);line-height:calc(var(--base-grid-size) * 3.5);color:var(--type-light-low-contrast);flex:1 1 auto}.divider{align-self:stretch;border-right:var(--border-width) solid var(--border-light);margin:0 var(--base-grid-size) 0 0;flex-shrink:0}.add-description-wrap{flex-shrink:0}.title-input,.description-input{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);padding:var(--size-small) var(--size-medium);color:var(--type-light-high-contrast);outline:none;min-width:0}.title-input{font:var(--stat-xsmall);flex:1 1 auto}.description-input{font:var(--input-small);flex:1 1 auto}.title-input:focus,.description-input:focus{border-color:var(--purp-60)}.commit{flex-shrink:0}.actions{display:flex;align-items:center;gap:var(--size-small);flex-shrink:0}\n"] }]
5569
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { title: [{
5570
+ type: Input
5571
+ }], description: [{
5572
+ type: Input
5573
+ }], titleMaxLength: [{
5574
+ type: Input
5575
+ }], descriptionMaxLength: [{
5576
+ type: Input
5577
+ }], titleChange: [{
5578
+ type: Output
5579
+ }], descriptionChange: [{
5580
+ type: Output
5581
+ }], titleInputRef: [{
5582
+ type: ViewChild,
5583
+ args: ['titleInput']
5584
+ }], descriptionInputRef: [{
5585
+ type: ViewChild,
5586
+ args: ['descriptionInput']
5587
+ }], isEditing: [{
5588
+ type: HostBinding,
5589
+ args: ['class.editing']
5590
+ }], onDocumentMouseDown: [{
5591
+ type: HostListener,
5592
+ args: ['document:mousedown', ['$event.target']]
5593
+ }] } });
5594
+
5395
5595
  /**
5396
5596
  * Page header used to display the page/product the user is on.
5397
5597
  *
@@ -15345,6 +15545,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
15345
15545
  DialogComponent,
15346
15546
  DollarsPipe,
15347
15547
  DonutComponent,
15548
+ EditableHeadingComponent,
15348
15549
  EditViewComponent,
15349
15550
  FunnelChartComponent,
15350
15551
  HelpComponent,
@@ -15442,6 +15643,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
15442
15643
  DialogComponent,
15443
15644
  DollarsPipe,
15444
15645
  DonutComponent,
15646
+ EditableHeadingComponent,
15445
15647
  EditViewComponent,
15446
15648
  FunnelChartComponent,
15447
15649
  HelpComponent,
@@ -15543,6 +15745,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15543
15745
  DialogComponent,
15544
15746
  DollarsPipe,
15545
15747
  DonutComponent,
15748
+ EditableHeadingComponent,
15546
15749
  EditViewComponent,
15547
15750
  FunnelChartComponent,
15548
15751
  HelpComponent,
@@ -15643,6 +15846,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15643
15846
  DialogComponent,
15644
15847
  DollarsPipe,
15645
15848
  DonutComponent,
15849
+ EditableHeadingComponent,
15646
15850
  EditViewComponent,
15647
15851
  FunnelChartComponent,
15648
15852
  HelpComponent,
@@ -15723,5 +15927,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15723
15927
  * Generated bundle index. Do not edit.
15724
15928
  */
15725
15929
 
15726
- export { ANIMATION_CONSTANTS, AllViewsModalComponent, AlphabeticFieldComponent, AutoFocusDirective, BadgeComponent, BannerActionComponent, BannerComponent, ButtonComponent, ButtonGroupComponent, CalloutComponent, CardCheckboxComponent, Chart, ChartComponent, CheckboxComponent, CurrencyFieldComponent, DataTableCellComponent, DataTableComponent, DataTableHeaderCellComponent, DataTableRowComponent, DateComponent, DatePipe, DateRangeComponent, DaysPipe, DialogComponent, DollarsPipe, DonutComponent, DownloadService, EditViewComponent, FunnelChartComponent, HelpComponent, HighlightComponent, IconComponent, InputLabelComponent, IssueComponent, LegendItemComponent, LinkComponent, LoadingComponent, LoadingCoverComponent, LockedTooltipDirective, MapIndicatorComponent, MentionsInputComponent, MenuComponent, MenuItemComponent, MetricComponent, MiniPieComponent, ModalComponent, NotificationBadgeComponent, NumberFieldComponent, NumberPipe, OptionGroupPipe, OverlayDirective, OverlayOutletComponent, PageHeaderComponent, PercentageFieldComponent, PercentagePipe, PermissionPickerComponent, PhoneFieldComponent, ProgressComponent, RadioComponent, RivModule, RivSelect, RivTable, RivViews, SVGTextTruncateDirective, SearchComponent, SearchSelectComponent, SelectComponent, SelectNodeComponent, SentenceCasePipe, SideSheetComponent, SimpleSelectComponent, SimpleTableCellComponent, SimpleTableComponent, SimpleTableHeaderCellComponent, SimpleTableRowComponent, SizeDirective, SmallCurrencyPipe, SrOnlyComponent, StackedColumnComponent, StackedRowComponent, SwitchCheckboxComponent, TabComponent, TableColumnSettingsComponent, TableColumnSettingsSideSheetComponent, TableComponent, TableCsvExportComponent, TableSearchColumnsComponent, TableSearchComponent, TabsComponent, TextFieldComponent, TextareaFieldComponent, TimeSeriesComponent, ToastActionComponent, ToastComponent, TooltipComponent, TooltipDirective, TrendComponent, TruncateComponent, ValidationMessageComponent, ViewMenuComponent, ViewsComponent, VisibilityDirective, ZeroStateComponent, toSentenceCase };
15930
+ export { ANIMATION_CONSTANTS, AllViewsModalComponent, AlphabeticFieldComponent, AutoFocusDirective, BadgeComponent, BannerActionComponent, BannerComponent, ButtonComponent, ButtonGroupComponent, CalloutComponent, CardCheckboxComponent, Chart, ChartComponent, CheckboxComponent, CurrencyFieldComponent, DataTableCellComponent, DataTableComponent, DataTableHeaderCellComponent, DataTableRowComponent, DateComponent, DatePipe, DateRangeComponent, DaysPipe, DialogComponent, DollarsPipe, DonutComponent, DownloadService, EditViewComponent, EditableHeadingComponent, FunnelChartComponent, HelpComponent, HighlightComponent, IconComponent, InputLabelComponent, IssueComponent, LegendItemComponent, LinkComponent, LoadingComponent, LoadingCoverComponent, LockedTooltipDirective, MapIndicatorComponent, MentionsInputComponent, MenuComponent, MenuItemComponent, MetricComponent, MiniPieComponent, ModalComponent, NotificationBadgeComponent, NumberFieldComponent, NumberPipe, OptionGroupPipe, OverlayDirective, OverlayOutletComponent, PageHeaderComponent, PercentageFieldComponent, PercentagePipe, PermissionPickerComponent, PhoneFieldComponent, ProgressComponent, RadioComponent, RivModule, RivSelect, RivTable, RivViews, SVGTextTruncateDirective, SearchComponent, SearchSelectComponent, SelectComponent, SelectNodeComponent, SentenceCasePipe, SideSheetComponent, SimpleSelectComponent, SimpleTableCellComponent, SimpleTableComponent, SimpleTableHeaderCellComponent, SimpleTableRowComponent, SizeDirective, SmallCurrencyPipe, SrOnlyComponent, StackedColumnComponent, StackedRowComponent, SwitchCheckboxComponent, TabComponent, TableColumnSettingsComponent, TableColumnSettingsSideSheetComponent, TableComponent, TableCsvExportComponent, TableSearchColumnsComponent, TableSearchComponent, TabsComponent, TextFieldComponent, TextareaFieldComponent, TimeSeriesComponent, ToastActionComponent, ToastComponent, TooltipComponent, TooltipDirective, TrendComponent, TruncateComponent, ValidationMessageComponent, ViewMenuComponent, ViewsComponent, VisibilityDirective, ZeroStateComponent, toSentenceCase };
15727
15931
  //# sourceMappingURL=rivet-health-design-system.mjs.map