@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.
@@ -2090,12 +2090,19 @@ var RivSelect;
2090
2090
  return this.byId.has(option.id);
2091
2091
  }
2092
2092
  add(option) {
2093
- if (this.byId.has(option.id)) {
2094
- // Preserve insertion order while swapping to the newer object
2095
- // reference. Rebuilding the full Set matches the previous
2096
- // implementation's semantics; the cost of that rebuild only hits
2097
- // the rare "re-add existing" path — the common O(N²) case (fresh
2098
- // adds during construction) no longer pays it.
2093
+ const existing = this.byId.get(option.id);
2094
+ if (existing === option) {
2095
+ // Same object reference — nothing to update. Ancestor re-adds
2096
+ // during a selection snapshot hit this path repeatedly, so keeping
2097
+ // it O(1) is what prevents the tree-select N² blow-up seen in
2098
+ // RVT-25470.
2099
+ return this;
2100
+ }
2101
+ if (existing !== undefined) {
2102
+ // Different reference, same id — swap the stored ref while
2103
+ // preserving Set insertion order. The rebuild is O(N), but this
2104
+ // path is rare in practice (the hot ancestor-snapshot loop takes
2105
+ // the identity fast-path above).
2099
2106
  const items = [...this].map(o => (o.id === option.id ? option : o));
2100
2107
  this.byId.set(option.id, option);
2101
2108
  super.clear();
@@ -2394,17 +2401,22 @@ var RivSelect;
2394
2401
  const snapshot = new OptionSet(state.selection.selected);
2395
2402
  const topLevelOptions = getTopLevelOptions(state.sourceOptionGroups);
2396
2403
  const [parents] = getRelationshipMaps(topLevelOptions);
2397
- // For each selected option, add all its ancestors to the snapshot
2404
+ // Sibling leaves share ancestors, so once we've walked up through a
2405
+ // given parent id we can stop — anything above it has already been
2406
+ // added by a previous iteration. Without this short-circuit the loop
2407
+ // re-runs findOption (which is a full tree walk) once per shared
2408
+ // ancestor edge, which was the #2 hotspot behind OptionSet.add in
2409
+ // RVT-25470's profile.
2410
+ const visited = new Set();
2398
2411
  for (const selectedOption of state.selection.selected) {
2399
- let currentId = selectedOption.id;
2400
- let parentId = parents.get(currentId);
2401
- while (parentId !== undefined) {
2412
+ let parentId = parents.get(selectedOption.id);
2413
+ while (parentId !== undefined && !visited.has(parentId)) {
2414
+ visited.add(parentId);
2402
2415
  const parentOption = findOption(topLevelOptions, parentId);
2403
2416
  if (parentOption) {
2404
2417
  snapshot.add(parentOption);
2405
2418
  }
2406
- currentId = parentId;
2407
- parentId = parents.get(currentId);
2419
+ parentId = parents.get(parentId);
2408
2420
  }
2409
2421
  }
2410
2422
  return snapshot;
@@ -5334,6 +5346,185 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5334
5346
  type: Input
5335
5347
  }] } });
5336
5348
 
5349
+ /**
5350
+ * A borderless heading with a click-to-edit title and an optional
5351
+ * click-to-edit description, plus a projected slot for actions.
5352
+ *
5353
+ * Layout: `[title] | [description] [actions]`
5354
+ *
5355
+ * - Click the title to rename; click the description (or the ghost
5356
+ * "+ Add description" button when empty) to edit it.
5357
+ * - Only one of title or description can be edited at a time.
5358
+ * - While either is being edited, the `[actions]` slot is hidden so
5359
+ * projected controls don't compete with the edit affordance.
5360
+ *
5361
+ * Commit semantics: `titleChange` / `descriptionChange` fire when the user
5362
+ * commits — Enter, outside click, or the Check button — not on every
5363
+ * keystroke, and always on commit (even when the value is unchanged). The
5364
+ * "commit" framing over "change" is deliberate: consumers that persist on
5365
+ * commit (analytics, PATCH) treat the gesture itself as the event; those
5366
+ * that only care about diffs can compare `next === current` in the handler.
5367
+ * There is no cancel path.
5368
+ *
5369
+ * Outside-click commits (rather than cancels) to match the established DS
5370
+ * interaction pattern in `riv-date` and `riv-select`. If a future consumer
5371
+ * needs an abandon path, the soft first step is Escape-to-cancel rather
5372
+ * than changing outside-click's meaning.
5373
+ *
5374
+ * Value handling follows the same convention as `riv-text-field`: `[title]`
5375
+ * and `[description]` are treated as suggestions, not authoritative state.
5376
+ * On commit, the component keeps displaying the user's committed value,
5377
+ * and only overwrites its internal state when the parent explicitly sends
5378
+ * a different value. That lets the component demo out of the box (e.g. in
5379
+ * Storybook) without requiring a round trip through the parent.
5380
+ *
5381
+ * The component owns no border, background, or card chrome — consumers who
5382
+ * want a bordered container should wrap it.
5383
+ *
5384
+ * ```html
5385
+ * <riv-editable-heading
5386
+ * [title]="report.title"
5387
+ * [description]="report.description"
5388
+ * (titleChange)="onTitleCommit($event)"
5389
+ * (descriptionChange)="onDescriptionCommit($event)"
5390
+ * >
5391
+ * <riv-menu actions>
5392
+ * <ng-template #trigger>
5393
+ * <button rivButton [icon]="'MoreVertical'" [variant]="'ghost'"></button>
5394
+ * </ng-template>
5395
+ * <button riv-menu-item>Rename</button>
5396
+ * <button riv-menu-item>Duplicate</button>
5397
+ * </riv-menu>
5398
+ * <button rivButton actions [variant]="'primary'">Save</button>
5399
+ * </riv-editable-heading>
5400
+ * ```
5401
+ */
5402
+ class EditableHeadingComponent {
5403
+ set title(v) {
5404
+ if (v !== this._title)
5405
+ this._title = v;
5406
+ }
5407
+ get title() {
5408
+ return this._title;
5409
+ }
5410
+ set description(v) {
5411
+ if (v !== this._description)
5412
+ this._description = v;
5413
+ }
5414
+ get description() {
5415
+ return this._description;
5416
+ }
5417
+ constructor(cdr, host) {
5418
+ this.cdr = cdr;
5419
+ this.host = host;
5420
+ // See the "Value handling" section of the class-level doc.
5421
+ this._title = '';
5422
+ this._description = '';
5423
+ this.titleMaxLength = 100;
5424
+ this.descriptionMaxLength = 300;
5425
+ this.titleChange = new EventEmitter();
5426
+ this.descriptionChange = new EventEmitter();
5427
+ this.mode = 'view';
5428
+ this.draftTitle = '';
5429
+ this.draftDescription = '';
5430
+ }
5431
+ get isEditing() {
5432
+ return this.mode !== 'view';
5433
+ }
5434
+ startEditingTitle() {
5435
+ this.draftTitle = this.title;
5436
+ this.mode = 'editingTitle';
5437
+ // Defer focus until Angular has rendered the input into the DOM.
5438
+ setTimeout(() => this.focusEnd(this.titleInputRef), 0);
5439
+ }
5440
+ startEditingDescription() {
5441
+ this.draftDescription = this.description;
5442
+ this.mode = 'editingDescription';
5443
+ setTimeout(() => this.focusEnd(this.descriptionInputRef), 0);
5444
+ }
5445
+ commitTitle() {
5446
+ if (this.mode !== 'editingTitle')
5447
+ return;
5448
+ // Title cannot be committed empty. The Check button is disabled in that
5449
+ // state; for Enter and outside-click we revert to the current title so
5450
+ // the user is never stuck in edit mode with a rejected value.
5451
+ if (!this.draftTitle) {
5452
+ this.mode = 'view';
5453
+ return;
5454
+ }
5455
+ const value = this.draftTitle;
5456
+ this._title = value;
5457
+ this.mode = 'view';
5458
+ this.titleChange.emit(value);
5459
+ }
5460
+ commitDescription() {
5461
+ if (this.mode !== 'editingDescription')
5462
+ return;
5463
+ const value = this.draftDescription;
5464
+ this._description = value;
5465
+ this.mode = 'view';
5466
+ this.descriptionChange.emit(value);
5467
+ }
5468
+ // Listens on `mousedown` (not `click`) so the check runs before Angular
5469
+ // re-renders the trigger element out of the DOM — otherwise
5470
+ // `host.contains(target)` returns false for a click that landed on the
5471
+ // now-removed `.title` / `.description` element. Same pattern as
5472
+ // `riv-date`.
5473
+ onDocumentMouseDown(target) {
5474
+ if (this.mode === 'view' || !(target instanceof Element))
5475
+ return;
5476
+ if (this.host.nativeElement.contains(target))
5477
+ return;
5478
+ if (this.mode === 'editingTitle') {
5479
+ this.commitTitle();
5480
+ }
5481
+ else if (this.mode === 'editingDescription') {
5482
+ this.commitDescription();
5483
+ }
5484
+ }
5485
+ // Focus with caret at end (rather than selecting all) so the user can
5486
+ // continue typing where the previous value left off.
5487
+ focusEnd(ref) {
5488
+ const el = ref === null || ref === void 0 ? void 0 : ref.nativeElement;
5489
+ if (!el)
5490
+ return;
5491
+ el.focus();
5492
+ const len = el.value.length;
5493
+ el.setSelectionRange(len, len);
5494
+ this.cdr.markForCheck();
5495
+ }
5496
+ }
5497
+ 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 });
5498
+ 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 });
5499
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditableHeadingComponent, decorators: [{
5500
+ type: Component,
5501
+ 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"] }]
5502
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { title: [{
5503
+ type: Input
5504
+ }], description: [{
5505
+ type: Input
5506
+ }], titleMaxLength: [{
5507
+ type: Input
5508
+ }], descriptionMaxLength: [{
5509
+ type: Input
5510
+ }], titleChange: [{
5511
+ type: Output
5512
+ }], descriptionChange: [{
5513
+ type: Output
5514
+ }], titleInputRef: [{
5515
+ type: ViewChild,
5516
+ args: ['titleInput']
5517
+ }], descriptionInputRef: [{
5518
+ type: ViewChild,
5519
+ args: ['descriptionInput']
5520
+ }], isEditing: [{
5521
+ type: HostBinding,
5522
+ args: ['class.editing']
5523
+ }], onDocumentMouseDown: [{
5524
+ type: HostListener,
5525
+ args: ['document:mousedown', ['$event.target']]
5526
+ }] } });
5527
+
5337
5528
  /**
5338
5529
  * Page header used to display the page/product the user is on.
5339
5530
  *
@@ -14803,6 +14994,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
14803
14994
  DialogComponent,
14804
14995
  DollarsPipe,
14805
14996
  DonutComponent,
14997
+ EditableHeadingComponent,
14806
14998
  EditViewComponent,
14807
14999
  FunnelChartComponent,
14808
15000
  HelpComponent,
@@ -14900,6 +15092,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
14900
15092
  DialogComponent,
14901
15093
  DollarsPipe,
14902
15094
  DonutComponent,
15095
+ EditableHeadingComponent,
14903
15096
  EditViewComponent,
14904
15097
  FunnelChartComponent,
14905
15098
  HelpComponent,
@@ -15001,6 +15194,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15001
15194
  DialogComponent,
15002
15195
  DollarsPipe,
15003
15196
  DonutComponent,
15197
+ EditableHeadingComponent,
15004
15198
  EditViewComponent,
15005
15199
  FunnelChartComponent,
15006
15200
  HelpComponent,
@@ -15101,6 +15295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15101
15295
  DialogComponent,
15102
15296
  DollarsPipe,
15103
15297
  DonutComponent,
15298
+ EditableHeadingComponent,
15104
15299
  EditViewComponent,
15105
15300
  FunnelChartComponent,
15106
15301
  HelpComponent,
@@ -15181,5 +15376,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15181
15376
  * Generated bundle index. Do not edit.
15182
15377
  */
15183
15378
 
15184
- 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 };
15379
+ 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 };
15185
15380
  //# sourceMappingURL=rivet-health-design-system.mjs.map