@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.
@@ -2073,28 +2073,45 @@ var RivSelect;
2073
2073
  * determined by the option's ID rather than the object reference.
2074
2074
  */
2075
2075
  class OptionSet extends Set {
2076
+ constructor(values) {
2077
+ super();
2078
+ // Parallel id → option map so has()/add()/delete() are O(1) instead of
2079
+ // spreading the Set and linear-scanning it. Rebuilding an O(N²) lookup
2080
+ // for a 16k-option selection was the primary cause of the multi-minute
2081
+ // freeze that surfaced RVT-25383's tree-select scale problem.
2082
+ this.byId = new Map();
2083
+ if (values) {
2084
+ for (const value of values) {
2085
+ this.add(value);
2086
+ }
2087
+ }
2088
+ }
2076
2089
  has(option) {
2077
- return !![...this].find(o => o.id === option.id);
2090
+ return this.byId.has(option.id);
2078
2091
  }
2079
2092
  add(option) {
2080
- if (this.has(option)) {
2081
- // The Set already has some version of this option, but we'll make sure
2082
- // it has the most recent object reference (while keeping insertion
2083
- // order consistent).
2084
- const newOptions = [...this].map(o => o.id === option.id ? option : o);
2085
- this.clear();
2086
- newOptions.forEach(o => {
2087
- super.add(o);
2088
- });
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.
2099
+ const items = [...this].map(o => (o.id === option.id ? option : o));
2100
+ this.byId.set(option.id, option);
2101
+ super.clear();
2102
+ for (const item of items)
2103
+ super.add(item);
2089
2104
  }
2090
2105
  else {
2106
+ this.byId.set(option.id, option);
2091
2107
  super.add(option);
2092
2108
  }
2093
2109
  return this;
2094
2110
  }
2095
2111
  delete(option) {
2096
- const existing = [...this].find(o => o.id === option.id);
2112
+ const existing = this.byId.get(option.id);
2097
2113
  if (existing) {
2114
+ this.byId.delete(option.id);
2098
2115
  super.delete(existing);
2099
2116
  return true;
2100
2117
  }
@@ -2102,6 +2119,10 @@ var RivSelect;
2102
2119
  return false;
2103
2120
  }
2104
2121
  }
2122
+ clear() {
2123
+ this.byId.clear();
2124
+ super.clear();
2125
+ }
2105
2126
  }
2106
2127
  RivSelect.OptionSet = OptionSet;
2107
2128
  const MIN_OPTIONS_FOR_CONTROLS = 5;
@@ -2702,7 +2723,7 @@ var RivSelect;
2702
2723
  }
2703
2724
  function toggleVisibleSelected(state) {
2704
2725
  const leaves = flattenOptions(getTopLevelOptions(state.sourceOptionGroups), true);
2705
- const isAllSelected = leaves.every(leaf => [...state.selection.selected].map(({ id }) => id).includes(leaf.id));
2726
+ const isAllSelected = leaves.every(leaf => state.selection.selected.has(leaf));
2706
2727
  const newSelection = new OptionSet(state.selection.selected);
2707
2728
  for (const leaf of leaves) {
2708
2729
  if (isAllSelected)
@@ -5313,6 +5334,185 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5313
5334
  type: Input
5314
5335
  }] } });
5315
5336
 
5337
+ /**
5338
+ * A borderless heading with a click-to-edit title and an optional
5339
+ * click-to-edit description, plus a projected slot for actions.
5340
+ *
5341
+ * Layout: `[title] | [description] [actions]`
5342
+ *
5343
+ * - Click the title to rename; click the description (or the ghost
5344
+ * "+ Add description" button when empty) to edit it.
5345
+ * - Only one of title or description can be edited at a time.
5346
+ * - While either is being edited, the `[actions]` slot is hidden so
5347
+ * projected controls don't compete with the edit affordance.
5348
+ *
5349
+ * Commit semantics: `titleChange` / `descriptionChange` fire when the user
5350
+ * commits — Enter, outside click, or the Check button — not on every
5351
+ * keystroke, and always on commit (even when the value is unchanged). The
5352
+ * "commit" framing over "change" is deliberate: consumers that persist on
5353
+ * commit (analytics, PATCH) treat the gesture itself as the event; those
5354
+ * that only care about diffs can compare `next === current` in the handler.
5355
+ * There is no cancel path.
5356
+ *
5357
+ * Outside-click commits (rather than cancels) to match the established DS
5358
+ * interaction pattern in `riv-date` and `riv-select`. If a future consumer
5359
+ * needs an abandon path, the soft first step is Escape-to-cancel rather
5360
+ * than changing outside-click's meaning.
5361
+ *
5362
+ * Value handling follows the same convention as `riv-text-field`: `[title]`
5363
+ * and `[description]` are treated as suggestions, not authoritative state.
5364
+ * On commit, the component keeps displaying the user's committed value,
5365
+ * and only overwrites its internal state when the parent explicitly sends
5366
+ * a different value. That lets the component demo out of the box (e.g. in
5367
+ * Storybook) without requiring a round trip through the parent.
5368
+ *
5369
+ * The component owns no border, background, or card chrome — consumers who
5370
+ * want a bordered container should wrap it.
5371
+ *
5372
+ * ```html
5373
+ * <riv-editable-heading
5374
+ * [title]="report.title"
5375
+ * [description]="report.description"
5376
+ * (titleChange)="onTitleCommit($event)"
5377
+ * (descriptionChange)="onDescriptionCommit($event)"
5378
+ * >
5379
+ * <riv-menu actions>
5380
+ * <ng-template #trigger>
5381
+ * <button rivButton [icon]="'MoreVertical'" [variant]="'ghost'"></button>
5382
+ * </ng-template>
5383
+ * <button riv-menu-item>Rename</button>
5384
+ * <button riv-menu-item>Duplicate</button>
5385
+ * </riv-menu>
5386
+ * <button rivButton actions [variant]="'primary'">Save</button>
5387
+ * </riv-editable-heading>
5388
+ * ```
5389
+ */
5390
+ class EditableHeadingComponent {
5391
+ set title(v) {
5392
+ if (v !== this._title)
5393
+ this._title = v;
5394
+ }
5395
+ get title() {
5396
+ return this._title;
5397
+ }
5398
+ set description(v) {
5399
+ if (v !== this._description)
5400
+ this._description = v;
5401
+ }
5402
+ get description() {
5403
+ return this._description;
5404
+ }
5405
+ constructor(cdr, host) {
5406
+ this.cdr = cdr;
5407
+ this.host = host;
5408
+ // See the "Value handling" section of the class-level doc.
5409
+ this._title = '';
5410
+ this._description = '';
5411
+ this.titleMaxLength = 100;
5412
+ this.descriptionMaxLength = 300;
5413
+ this.titleChange = new EventEmitter();
5414
+ this.descriptionChange = new EventEmitter();
5415
+ this.mode = 'view';
5416
+ this.draftTitle = '';
5417
+ this.draftDescription = '';
5418
+ }
5419
+ get isEditing() {
5420
+ return this.mode !== 'view';
5421
+ }
5422
+ startEditingTitle() {
5423
+ this.draftTitle = this.title;
5424
+ this.mode = 'editingTitle';
5425
+ // Defer focus until Angular has rendered the input into the DOM.
5426
+ setTimeout(() => this.focusEnd(this.titleInputRef), 0);
5427
+ }
5428
+ startEditingDescription() {
5429
+ this.draftDescription = this.description;
5430
+ this.mode = 'editingDescription';
5431
+ setTimeout(() => this.focusEnd(this.descriptionInputRef), 0);
5432
+ }
5433
+ commitTitle() {
5434
+ if (this.mode !== 'editingTitle')
5435
+ return;
5436
+ // Title cannot be committed empty. The Check button is disabled in that
5437
+ // state; for Enter and outside-click we revert to the current title so
5438
+ // the user is never stuck in edit mode with a rejected value.
5439
+ if (!this.draftTitle) {
5440
+ this.mode = 'view';
5441
+ return;
5442
+ }
5443
+ const value = this.draftTitle;
5444
+ this._title = value;
5445
+ this.mode = 'view';
5446
+ this.titleChange.emit(value);
5447
+ }
5448
+ commitDescription() {
5449
+ if (this.mode !== 'editingDescription')
5450
+ return;
5451
+ const value = this.draftDescription;
5452
+ this._description = value;
5453
+ this.mode = 'view';
5454
+ this.descriptionChange.emit(value);
5455
+ }
5456
+ // Listens on `mousedown` (not `click`) so the check runs before Angular
5457
+ // re-renders the trigger element out of the DOM — otherwise
5458
+ // `host.contains(target)` returns false for a click that landed on the
5459
+ // now-removed `.title` / `.description` element. Same pattern as
5460
+ // `riv-date`.
5461
+ onDocumentMouseDown(target) {
5462
+ if (this.mode === 'view' || !(target instanceof Element))
5463
+ return;
5464
+ if (this.host.nativeElement.contains(target))
5465
+ return;
5466
+ if (this.mode === 'editingTitle') {
5467
+ this.commitTitle();
5468
+ }
5469
+ else if (this.mode === 'editingDescription') {
5470
+ this.commitDescription();
5471
+ }
5472
+ }
5473
+ // Focus with caret at end (rather than selecting all) so the user can
5474
+ // continue typing where the previous value left off.
5475
+ focusEnd(ref) {
5476
+ const el = ref === null || ref === void 0 ? void 0 : ref.nativeElement;
5477
+ if (!el)
5478
+ return;
5479
+ el.focus();
5480
+ const len = el.value.length;
5481
+ el.setSelectionRange(len, len);
5482
+ this.cdr.markForCheck();
5483
+ }
5484
+ }
5485
+ 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 });
5486
+ 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 });
5487
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditableHeadingComponent, decorators: [{
5488
+ type: Component,
5489
+ 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"] }]
5490
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { title: [{
5491
+ type: Input
5492
+ }], description: [{
5493
+ type: Input
5494
+ }], titleMaxLength: [{
5495
+ type: Input
5496
+ }], descriptionMaxLength: [{
5497
+ type: Input
5498
+ }], titleChange: [{
5499
+ type: Output
5500
+ }], descriptionChange: [{
5501
+ type: Output
5502
+ }], titleInputRef: [{
5503
+ type: ViewChild,
5504
+ args: ['titleInput']
5505
+ }], descriptionInputRef: [{
5506
+ type: ViewChild,
5507
+ args: ['descriptionInput']
5508
+ }], isEditing: [{
5509
+ type: HostBinding,
5510
+ args: ['class.editing']
5511
+ }], onDocumentMouseDown: [{
5512
+ type: HostListener,
5513
+ args: ['document:mousedown', ['$event.target']]
5514
+ }] } });
5515
+
5316
5516
  /**
5317
5517
  * Page header used to display the page/product the user is on.
5318
5518
  *
@@ -14782,6 +14982,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
14782
14982
  DialogComponent,
14783
14983
  DollarsPipe,
14784
14984
  DonutComponent,
14985
+ EditableHeadingComponent,
14785
14986
  EditViewComponent,
14786
14987
  FunnelChartComponent,
14787
14988
  HelpComponent,
@@ -14879,6 +15080,7 @@ RivModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
14879
15080
  DialogComponent,
14880
15081
  DollarsPipe,
14881
15082
  DonutComponent,
15083
+ EditableHeadingComponent,
14882
15084
  EditViewComponent,
14883
15085
  FunnelChartComponent,
14884
15086
  HelpComponent,
@@ -14980,6 +15182,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
14980
15182
  DialogComponent,
14981
15183
  DollarsPipe,
14982
15184
  DonutComponent,
15185
+ EditableHeadingComponent,
14983
15186
  EditViewComponent,
14984
15187
  FunnelChartComponent,
14985
15188
  HelpComponent,
@@ -15080,6 +15283,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15080
15283
  DialogComponent,
15081
15284
  DollarsPipe,
15082
15285
  DonutComponent,
15286
+ EditableHeadingComponent,
15083
15287
  EditViewComponent,
15084
15288
  FunnelChartComponent,
15085
15289
  HelpComponent,
@@ -15160,5 +15364,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
15160
15364
  * Generated bundle index. Do not edit.
15161
15365
  */
15162
15366
 
15163
- 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 };
15367
+ 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 };
15164
15368
  //# sourceMappingURL=rivet-health-design-system.mjs.map