@rivet-health/design-system 40.6.2 → 40.7.1

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.
@@ -2064,12 +2064,19 @@ var RivSelect;
2064
2064
  return this.byId.has(option.id);
2065
2065
  }
2066
2066
  add(option) {
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.
2067
+ const existing = this.byId.get(option.id);
2068
+ if (existing === option) {
2069
+ // Same object reference — nothing to update. Ancestor re-adds
2070
+ // during a selection snapshot hit this path repeatedly, so keeping
2071
+ // it O(1) is what prevents the tree-select N² blow-up seen in
2072
+ // RVT-25470.
2073
+ return this;
2074
+ }
2075
+ if (existing !== undefined) {
2076
+ // Different reference, same id — swap the stored ref while
2077
+ // preserving Set insertion order. The rebuild is O(N), but this
2078
+ // path is rare in practice (the hot ancestor-snapshot loop takes
2079
+ // the identity fast-path above).
2073
2080
  const items = [...this].map(o => (o.id === option.id ? option : o));
2074
2081
  this.byId.set(option.id, option);
2075
2082
  super.clear();
@@ -2410,17 +2417,22 @@ var RivSelect;
2410
2417
  const snapshot = new OptionSet(state.selection.selected);
2411
2418
  const topLevelOptions = getTopLevelOptions(state.sourceOptionGroups);
2412
2419
  const [parents] = getRelationshipMaps(topLevelOptions);
2413
- // For each selected option, add all its ancestors to the snapshot
2420
+ // Sibling leaves share ancestors, so once we've walked up through a
2421
+ // given parent id we can stop — anything above it has already been
2422
+ // added by a previous iteration. Without this short-circuit the loop
2423
+ // re-runs findOption (which is a full tree walk) once per shared
2424
+ // ancestor edge, which was the #2 hotspot behind OptionSet.add in
2425
+ // RVT-25470's profile.
2426
+ const visited = new Set();
2414
2427
  for (const selectedOption of state.selection.selected) {
2415
- let currentId = selectedOption.id;
2416
- let parentId = parents.get(currentId);
2417
- while (parentId !== undefined) {
2428
+ let parentId = parents.get(selectedOption.id);
2429
+ while (parentId !== undefined && !visited.has(parentId)) {
2430
+ visited.add(parentId);
2418
2431
  const parentOption = findOption(topLevelOptions, parentId);
2419
2432
  if (parentOption) {
2420
2433
  snapshot.add(parentOption);
2421
2434
  }
2422
- currentId = parentId;
2423
- parentId = parents.get(currentId);
2435
+ parentId = parents.get(parentId);
2424
2436
  }
2425
2437
  }
2426
2438
  return snapshot;
@@ -5413,6 +5425,185 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5413
5425
  type: Input
5414
5426
  }] } });
5415
5427
 
5428
+ /**
5429
+ * A borderless heading with a click-to-edit title and an optional
5430
+ * click-to-edit description, plus a projected slot for actions.
5431
+ *
5432
+ * Layout: `[title] | [description] [actions]`
5433
+ *
5434
+ * - Click the title to rename; click the description (or the ghost
5435
+ * "+ Add description" button when empty) to edit it.
5436
+ * - Only one of title or description can be edited at a time.
5437
+ * - While either is being edited, the `[actions]` slot is hidden so
5438
+ * projected controls don't compete with the edit affordance.
5439
+ *
5440
+ * Commit semantics: `titleChange` / `descriptionChange` fire when the user
5441
+ * commits — Enter, outside click, or the Check button — not on every
5442
+ * keystroke, and always on commit (even when the value is unchanged). The
5443
+ * "commit" framing over "change" is deliberate: consumers that persist on
5444
+ * commit (analytics, PATCH) treat the gesture itself as the event; those
5445
+ * that only care about diffs can compare `next === current` in the handler.
5446
+ * There is no cancel path.
5447
+ *
5448
+ * Outside-click commits (rather than cancels) to match the established DS
5449
+ * interaction pattern in `riv-date` and `riv-select`. If a future consumer
5450
+ * needs an abandon path, the soft first step is Escape-to-cancel rather
5451
+ * than changing outside-click's meaning.
5452
+ *
5453
+ * Value handling follows the same convention as `riv-text-field`: `[title]`
5454
+ * and `[description]` are treated as suggestions, not authoritative state.
5455
+ * On commit, the component keeps displaying the user's committed value,
5456
+ * and only overwrites its internal state when the parent explicitly sends
5457
+ * a different value. That lets the component demo out of the box (e.g. in
5458
+ * Storybook) without requiring a round trip through the parent.
5459
+ *
5460
+ * The component owns no border, background, or card chrome — consumers who
5461
+ * want a bordered container should wrap it.
5462
+ *
5463
+ * ```html
5464
+ * <riv-editable-heading
5465
+ * [title]="report.title"
5466
+ * [description]="report.description"
5467
+ * (titleChange)="onTitleCommit($event)"
5468
+ * (descriptionChange)="onDescriptionCommit($event)"
5469
+ * >
5470
+ * <riv-menu actions>
5471
+ * <ng-template #trigger>
5472
+ * <button rivButton [icon]="'MoreVertical'" [variant]="'ghost'"></button>
5473
+ * </ng-template>
5474
+ * <button riv-menu-item>Rename</button>
5475
+ * <button riv-menu-item>Duplicate</button>
5476
+ * </riv-menu>
5477
+ * <button rivButton actions [variant]="'primary'">Save</button>
5478
+ * </riv-editable-heading>
5479
+ * ```
5480
+ */
5481
+ class EditableHeadingComponent {
5482
+ set title(v) {
5483
+ if (v !== this._title)
5484
+ this._title = v;
5485
+ }
5486
+ get title() {
5487
+ return this._title;
5488
+ }
5489
+ set description(v) {
5490
+ if (v !== this._description)
5491
+ this._description = v;
5492
+ }
5493
+ get description() {
5494
+ return this._description;
5495
+ }
5496
+ constructor(cdr, host) {
5497
+ this.cdr = cdr;
5498
+ this.host = host;
5499
+ // See the "Value handling" section of the class-level doc.
5500
+ this._title = '';
5501
+ this._description = '';
5502
+ this.titleMaxLength = 100;
5503
+ this.descriptionMaxLength = 300;
5504
+ this.titleChange = new EventEmitter();
5505
+ this.descriptionChange = new EventEmitter();
5506
+ this.mode = 'view';
5507
+ this.draftTitle = '';
5508
+ this.draftDescription = '';
5509
+ }
5510
+ get isEditing() {
5511
+ return this.mode !== 'view';
5512
+ }
5513
+ startEditingTitle() {
5514
+ this.draftTitle = this.title;
5515
+ this.mode = 'editingTitle';
5516
+ // Defer focus until Angular has rendered the input into the DOM.
5517
+ setTimeout(() => this.focusEnd(this.titleInputRef), 0);
5518
+ }
5519
+ startEditingDescription() {
5520
+ this.draftDescription = this.description;
5521
+ this.mode = 'editingDescription';
5522
+ setTimeout(() => this.focusEnd(this.descriptionInputRef), 0);
5523
+ }
5524
+ commitTitle() {
5525
+ if (this.mode !== 'editingTitle')
5526
+ return;
5527
+ // Title cannot be committed empty. The Check button is disabled in that
5528
+ // state; for Enter and outside-click we revert to the current title so
5529
+ // the user is never stuck in edit mode with a rejected value.
5530
+ if (!this.draftTitle) {
5531
+ this.mode = 'view';
5532
+ return;
5533
+ }
5534
+ const value = this.draftTitle;
5535
+ this._title = value;
5536
+ this.mode = 'view';
5537
+ this.titleChange.emit(value);
5538
+ }
5539
+ commitDescription() {
5540
+ if (this.mode !== 'editingDescription')
5541
+ return;
5542
+ const value = this.draftDescription;
5543
+ this._description = value;
5544
+ this.mode = 'view';
5545
+ this.descriptionChange.emit(value);
5546
+ }
5547
+ // Listens on `mousedown` (not `click`) so the check runs before Angular
5548
+ // re-renders the trigger element out of the DOM — otherwise
5549
+ // `host.contains(target)` returns false for a click that landed on the
5550
+ // now-removed `.title` / `.description` element. Same pattern as
5551
+ // `riv-date`.
5552
+ onDocumentMouseDown(target) {
5553
+ if (this.mode === 'view' || !(target instanceof Element))
5554
+ return;
5555
+ if (this.host.nativeElement.contains(target))
5556
+ return;
5557
+ if (this.mode === 'editingTitle') {
5558
+ this.commitTitle();
5559
+ }
5560
+ else if (this.mode === 'editingDescription') {
5561
+ this.commitDescription();
5562
+ }
5563
+ }
5564
+ // Focus with caret at end (rather than selecting all) so the user can
5565
+ // continue typing where the previous value left off.
5566
+ focusEnd(ref) {
5567
+ const el = ref?.nativeElement;
5568
+ if (!el)
5569
+ return;
5570
+ el.focus();
5571
+ const len = el.value.length;
5572
+ el.setSelectionRange(len, len);
5573
+ this.cdr.markForCheck();
5574
+ }
5575
+ }
5576
+ 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 });
5577
+ 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 });
5578
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditableHeadingComponent, decorators: [{
5579
+ type: Component,
5580
+ 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"] }]
5581
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { title: [{
5582
+ type: Input
5583
+ }], description: [{
5584
+ type: Input
5585
+ }], titleMaxLength: [{
5586
+ type: Input
5587
+ }], descriptionMaxLength: [{
5588
+ type: Input
5589
+ }], titleChange: [{
5590
+ type: Output
5591
+ }], descriptionChange: [{
5592
+ type: Output
5593
+ }], titleInputRef: [{
5594
+ type: ViewChild,
5595
+ args: ['titleInput']
5596
+ }], descriptionInputRef: [{
5597
+ type: ViewChild,
5598
+ args: ['descriptionInput']
5599
+ }], isEditing: [{
5600
+ type: HostBinding,
5601
+ args: ['class.editing']
5602
+ }], onDocumentMouseDown: [{
5603
+ type: HostListener,
5604
+ args: ['document:mousedown', ['$event.target']]
5605
+ }] } });
5606
+
5416
5607
  /**
5417
5608
  * Page header used to display the page/product the user is on.
5418
5609
  *
@@ -15366,6 +15557,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
15366
15557
  DialogComponent,
15367
15558
  DollarsPipe,
15368
15559
  DonutComponent,
15560
+ EditableHeadingComponent,
15369
15561
  EditViewComponent,
15370
15562
  FunnelChartComponent,
15371
15563
  HelpComponent,
@@ -15463,6 +15655,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
15463
15655
  DialogComponent,
15464
15656
  DollarsPipe,
15465
15657
  DonutComponent,
15658
+ EditableHeadingComponent,
15466
15659
  EditViewComponent,
15467
15660
  FunnelChartComponent,
15468
15661
  HelpComponent,
@@ -15564,6 +15757,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15564
15757
  DialogComponent,
15565
15758
  DollarsPipe,
15566
15759
  DonutComponent,
15760
+ EditableHeadingComponent,
15567
15761
  EditViewComponent,
15568
15762
  FunnelChartComponent,
15569
15763
  HelpComponent,
@@ -15664,6 +15858,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15664
15858
  DialogComponent,
15665
15859
  DollarsPipe,
15666
15860
  DonutComponent,
15861
+ EditableHeadingComponent,
15667
15862
  EditViewComponent,
15668
15863
  FunnelChartComponent,
15669
15864
  HelpComponent,
@@ -15744,5 +15939,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15744
15939
  * Generated bundle index. Do not edit.
15745
15940
  */
15746
15941
 
15747
- 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 };
15942
+ 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 };
15748
15943
  //# sourceMappingURL=rivet-health-design-system.mjs.map