@ni/nimble-components 11.2.0 → 11.3.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.
@@ -13138,6 +13138,607 @@
13138
13138
  applyMixins(DelegatesARIAToolbar, ARIAGlobalStatesAndProperties);
13139
13139
  applyMixins(Toolbar$1, StartEnd, DelegatesARIAToolbar);
13140
13140
 
13141
+ /**
13142
+ * Creates a template for the {@link @microsoft/fast-foundation#(Tooltip:class)} component using the provided prefix.
13143
+ * @public
13144
+ */
13145
+ const tooltipTemplate = (context, definition) => {
13146
+ return html `
13147
+ ${when(x => x.tooltipVisible, html `
13148
+ <${context.tagFor(AnchoredRegion$1)}
13149
+ fixed-placement="true"
13150
+ auto-update-mode="${x => x.autoUpdateMode}"
13151
+ vertical-positioning-mode="${x => x.verticalPositioningMode}"
13152
+ vertical-default-position="${x => x.verticalDefaultPosition}"
13153
+ vertical-inset="${x => x.verticalInset}"
13154
+ vertical-scaling="${x => x.verticalScaling}"
13155
+ horizontal-positioning-mode="${x => x.horizontalPositioningMode}"
13156
+ horizontal-default-position="${x => x.horizontalDefaultPosition}"
13157
+ horizontal-scaling="${x => x.horizontalScaling}"
13158
+ horizontal-inset="${x => x.horizontalInset}"
13159
+ vertical-viewport-lock="${x => x.horizontalViewportLock}"
13160
+ horizontal-viewport-lock="${x => x.verticalViewportLock}"
13161
+ dir="${x => x.currentDirection}"
13162
+ ${ref("region")}
13163
+ >
13164
+ <div class="tooltip" part="tooltip" role="tooltip">
13165
+ <slot></slot>
13166
+ </div>
13167
+ </${context.tagFor(AnchoredRegion$1)}>
13168
+ `)}
13169
+ `;
13170
+ };
13171
+
13172
+ /**
13173
+ * Enumerates possible tooltip positions
13174
+ *
13175
+ * @public
13176
+ */
13177
+ const TooltipPosition = {
13178
+ /**
13179
+ * The tooltip is positioned above the element
13180
+ */
13181
+ top: "top",
13182
+ /**
13183
+ * The tooltip is positioned to the right of the element
13184
+ */
13185
+ right: "right",
13186
+ /**
13187
+ * The tooltip is positioned below the element
13188
+ */
13189
+ bottom: "bottom",
13190
+ /**
13191
+ * The tooltip is positioned to the left of the element
13192
+ */
13193
+ left: "left",
13194
+ /**
13195
+ * The tooltip is positioned before the element
13196
+ */
13197
+ start: "start",
13198
+ /**
13199
+ * The tooltip is positioned after the element
13200
+ */
13201
+ end: "end",
13202
+ /**
13203
+ * The tooltip is positioned above the element and to the left
13204
+ */
13205
+ topLeft: "top-left",
13206
+ /**
13207
+ * The tooltip is positioned above the element and to the right
13208
+ */
13209
+ topRight: "top-right",
13210
+ /**
13211
+ * The tooltip is positioned below the element and to the left
13212
+ */
13213
+ bottomLeft: "bottom-left",
13214
+ /**
13215
+ * The tooltip is positioned below the element and to the right
13216
+ */
13217
+ bottomRight: "bottom-right",
13218
+ /**
13219
+ * The tooltip is positioned above the element and to the left
13220
+ */
13221
+ topStart: "top-start",
13222
+ /**
13223
+ * The tooltip is positioned above the element and to the right
13224
+ */
13225
+ topEnd: "top-end",
13226
+ /**
13227
+ * The tooltip is positioned below the element and to the left
13228
+ */
13229
+ bottomStart: "bottom-start",
13230
+ /**
13231
+ * The tooltip is positioned below the element and to the right
13232
+ */
13233
+ bottomEnd: "bottom-end",
13234
+ };
13235
+
13236
+ /**
13237
+ * An Tooltip Custom HTML Element.
13238
+ *
13239
+ * @slot - The default slot for the tooltip content
13240
+ * @csspart tooltip - The tooltip element
13241
+ * @fires dismiss - Fires a custom 'dismiss' event when the tooltip is visible and escape key is pressed
13242
+ *
13243
+ * @public
13244
+ */
13245
+ class Tooltip$1 extends FoundationElement {
13246
+ constructor() {
13247
+ super(...arguments);
13248
+ /**
13249
+ * The id of the element the tooltip is anchored to
13250
+ *
13251
+ * @defaultValue - undefined
13252
+ * @public
13253
+ * HTML Attribute: anchor
13254
+ */
13255
+ this.anchor = "";
13256
+ /**
13257
+ * The delay in milliseconds before a tooltip is shown after a hover event
13258
+ *
13259
+ * @defaultValue - 300
13260
+ * @public
13261
+ * HTML Attribute: delay
13262
+ */
13263
+ this.delay = 300;
13264
+ /**
13265
+ * Controls when the tooltip updates its position, default is 'anchor' which only updates when
13266
+ * the anchor is resized. 'auto' will update on scroll/resize events.
13267
+ * Corresponds to anchored-region auto-update-mode.
13268
+ * @public
13269
+ * @remarks
13270
+ * HTML Attribute: auto-update-mode
13271
+ */
13272
+ this.autoUpdateMode = "anchor";
13273
+ /**
13274
+ * the html element currently being used as anchor.
13275
+ * Setting this directly overrides the anchor attribute.
13276
+ *
13277
+ * @public
13278
+ */
13279
+ this.anchorElement = null;
13280
+ /**
13281
+ * The current viewport element instance
13282
+ *
13283
+ * @internal
13284
+ */
13285
+ this.viewportElement = null;
13286
+ /**
13287
+ * @internal
13288
+ * @defaultValue "dynamic"
13289
+ */
13290
+ this.verticalPositioningMode = "dynamic";
13291
+ /**
13292
+ * @internal
13293
+ * @defaultValue "dynamic"
13294
+ */
13295
+ this.horizontalPositioningMode = "dynamic";
13296
+ /**
13297
+ * @internal
13298
+ */
13299
+ this.horizontalInset = "false";
13300
+ /**
13301
+ * @internal
13302
+ */
13303
+ this.verticalInset = "false";
13304
+ /**
13305
+ * @internal
13306
+ */
13307
+ this.horizontalScaling = "content";
13308
+ /**
13309
+ * @internal
13310
+ */
13311
+ this.verticalScaling = "content";
13312
+ /**
13313
+ * @internal
13314
+ */
13315
+ this.verticalDefaultPosition = undefined;
13316
+ /**
13317
+ * @internal
13318
+ */
13319
+ this.horizontalDefaultPosition = undefined;
13320
+ /**
13321
+ * @internal
13322
+ */
13323
+ this.tooltipVisible = false;
13324
+ /**
13325
+ * Track current direction to pass to the anchored region
13326
+ * updated when tooltip is shown
13327
+ *
13328
+ * @internal
13329
+ */
13330
+ this.currentDirection = Direction.ltr;
13331
+ /**
13332
+ * The timer that tracks delay time before the tooltip is shown on hover
13333
+ */
13334
+ this.showDelayTimer = null;
13335
+ /**
13336
+ * The timer that tracks delay time before the tooltip is hidden
13337
+ */
13338
+ this.hideDelayTimer = null;
13339
+ /**
13340
+ * Indicates whether the anchor is currently being hovered or has focus
13341
+ */
13342
+ this.isAnchorHoveredFocused = false;
13343
+ /**
13344
+ * Indicates whether the region is currently being hovered
13345
+ */
13346
+ this.isRegionHovered = false;
13347
+ /**
13348
+ * invoked when the anchored region's position relative to the anchor changes
13349
+ *
13350
+ * @internal
13351
+ */
13352
+ this.handlePositionChange = (ev) => {
13353
+ this.classList.toggle("top", this.region.verticalPosition === "start");
13354
+ this.classList.toggle("bottom", this.region.verticalPosition === "end");
13355
+ this.classList.toggle("inset-top", this.region.verticalPosition === "insetStart");
13356
+ this.classList.toggle("inset-bottom", this.region.verticalPosition === "insetEnd");
13357
+ this.classList.toggle("center-vertical", this.region.verticalPosition === "center");
13358
+ this.classList.toggle("left", this.region.horizontalPosition === "start");
13359
+ this.classList.toggle("right", this.region.horizontalPosition === "end");
13360
+ this.classList.toggle("inset-left", this.region.horizontalPosition === "insetStart");
13361
+ this.classList.toggle("inset-right", this.region.horizontalPosition === "insetEnd");
13362
+ this.classList.toggle("center-horizontal", this.region.horizontalPosition === "center");
13363
+ };
13364
+ /**
13365
+ * mouse enters region
13366
+ */
13367
+ this.handleRegionMouseOver = (ev) => {
13368
+ this.isRegionHovered = true;
13369
+ };
13370
+ /**
13371
+ * mouse leaves region
13372
+ */
13373
+ this.handleRegionMouseOut = (ev) => {
13374
+ this.isRegionHovered = false;
13375
+ this.startHideDelayTimer();
13376
+ };
13377
+ /**
13378
+ * mouse enters anchor
13379
+ */
13380
+ this.handleAnchorMouseOver = (ev) => {
13381
+ if (this.tooltipVisible) {
13382
+ // tooltip is already visible, just set the anchor hover flag
13383
+ this.isAnchorHoveredFocused = true;
13384
+ return;
13385
+ }
13386
+ this.startShowDelayTimer();
13387
+ };
13388
+ /**
13389
+ * mouse leaves anchor
13390
+ */
13391
+ this.handleAnchorMouseOut = (ev) => {
13392
+ this.isAnchorHoveredFocused = false;
13393
+ this.clearShowDelayTimer();
13394
+ this.startHideDelayTimer();
13395
+ };
13396
+ /**
13397
+ * anchor gets focus
13398
+ */
13399
+ this.handleAnchorFocusIn = (ev) => {
13400
+ this.startShowDelayTimer();
13401
+ };
13402
+ /**
13403
+ * anchor loses focus
13404
+ */
13405
+ this.handleAnchorFocusOut = (ev) => {
13406
+ this.isAnchorHoveredFocused = false;
13407
+ this.clearShowDelayTimer();
13408
+ this.startHideDelayTimer();
13409
+ };
13410
+ /**
13411
+ * starts the hide timer
13412
+ */
13413
+ this.startHideDelayTimer = () => {
13414
+ this.clearHideDelayTimer();
13415
+ if (!this.tooltipVisible) {
13416
+ return;
13417
+ }
13418
+ // allow 60 ms for account for pointer to move between anchor/tooltip
13419
+ // without hiding tooltip
13420
+ this.hideDelayTimer = window.setTimeout(() => {
13421
+ this.updateTooltipVisibility();
13422
+ }, 60);
13423
+ };
13424
+ /**
13425
+ * clears the hide delay
13426
+ */
13427
+ this.clearHideDelayTimer = () => {
13428
+ if (this.hideDelayTimer !== null) {
13429
+ clearTimeout(this.hideDelayTimer);
13430
+ this.hideDelayTimer = null;
13431
+ }
13432
+ };
13433
+ /**
13434
+ * starts the show timer if not currently running
13435
+ */
13436
+ this.startShowDelayTimer = () => {
13437
+ if (this.isAnchorHoveredFocused) {
13438
+ return;
13439
+ }
13440
+ if (this.delay > 1) {
13441
+ if (this.showDelayTimer === null)
13442
+ this.showDelayTimer = window.setTimeout(() => {
13443
+ this.startHover();
13444
+ }, this.delay);
13445
+ return;
13446
+ }
13447
+ this.startHover();
13448
+ };
13449
+ /**
13450
+ * start hover
13451
+ */
13452
+ this.startHover = () => {
13453
+ this.isAnchorHoveredFocused = true;
13454
+ this.updateTooltipVisibility();
13455
+ };
13456
+ /**
13457
+ * clears the show delay
13458
+ */
13459
+ this.clearShowDelayTimer = () => {
13460
+ if (this.showDelayTimer !== null) {
13461
+ clearTimeout(this.showDelayTimer);
13462
+ this.showDelayTimer = null;
13463
+ }
13464
+ };
13465
+ /**
13466
+ * Gets the anchor element by id
13467
+ */
13468
+ this.getAnchor = () => {
13469
+ const rootNode = this.getRootNode();
13470
+ if (rootNode instanceof ShadowRoot) {
13471
+ return rootNode.getElementById(this.anchor);
13472
+ }
13473
+ return document.getElementById(this.anchor);
13474
+ };
13475
+ /**
13476
+ * handles key down events to check for dismiss
13477
+ */
13478
+ this.handleDocumentKeydown = (e) => {
13479
+ if (!e.defaultPrevented && this.tooltipVisible) {
13480
+ switch (e.key) {
13481
+ case keyEscape:
13482
+ this.isAnchorHoveredFocused = false;
13483
+ this.updateTooltipVisibility();
13484
+ this.$emit("dismiss");
13485
+ break;
13486
+ }
13487
+ }
13488
+ };
13489
+ /**
13490
+ * determines whether to show or hide the tooltip based on current state
13491
+ */
13492
+ this.updateTooltipVisibility = () => {
13493
+ if (this.visible === false) {
13494
+ this.hideTooltip();
13495
+ }
13496
+ else if (this.visible === true) {
13497
+ this.showTooltip();
13498
+ return;
13499
+ }
13500
+ else {
13501
+ if (this.isAnchorHoveredFocused || this.isRegionHovered) {
13502
+ this.showTooltip();
13503
+ return;
13504
+ }
13505
+ this.hideTooltip();
13506
+ }
13507
+ };
13508
+ /**
13509
+ * shows the tooltip
13510
+ */
13511
+ this.showTooltip = () => {
13512
+ if (this.tooltipVisible) {
13513
+ return;
13514
+ }
13515
+ this.currentDirection = getDirection(this);
13516
+ this.tooltipVisible = true;
13517
+ document.addEventListener("keydown", this.handleDocumentKeydown);
13518
+ DOM.queueUpdate(this.setRegionProps);
13519
+ };
13520
+ /**
13521
+ * hides the tooltip
13522
+ */
13523
+ this.hideTooltip = () => {
13524
+ if (!this.tooltipVisible) {
13525
+ return;
13526
+ }
13527
+ this.clearHideDelayTimer();
13528
+ if (this.region !== null && this.region !== undefined) {
13529
+ this.region.removeEventListener("positionchange", this.handlePositionChange);
13530
+ this.region.viewportElement = null;
13531
+ this.region.anchorElement = null;
13532
+ this.region.removeEventListener("mouseover", this.handleRegionMouseOver);
13533
+ this.region.removeEventListener("mouseout", this.handleRegionMouseOut);
13534
+ }
13535
+ document.removeEventListener("keydown", this.handleDocumentKeydown);
13536
+ this.tooltipVisible = false;
13537
+ };
13538
+ /**
13539
+ * updates the tooltip anchored region props after it has been
13540
+ * added to the DOM
13541
+ */
13542
+ this.setRegionProps = () => {
13543
+ if (!this.tooltipVisible) {
13544
+ return;
13545
+ }
13546
+ this.region.viewportElement = this.viewportElement;
13547
+ this.region.anchorElement = this.anchorElement;
13548
+ this.region.addEventListener("positionchange", this.handlePositionChange);
13549
+ this.region.addEventListener("mouseover", this.handleRegionMouseOver, {
13550
+ passive: true,
13551
+ });
13552
+ this.region.addEventListener("mouseout", this.handleRegionMouseOut, {
13553
+ passive: true,
13554
+ });
13555
+ };
13556
+ }
13557
+ visibleChanged() {
13558
+ if (this.$fastController.isConnected) {
13559
+ this.updateTooltipVisibility();
13560
+ this.updateLayout();
13561
+ }
13562
+ }
13563
+ anchorChanged() {
13564
+ if (this.$fastController.isConnected) {
13565
+ this.anchorElement = this.getAnchor();
13566
+ }
13567
+ }
13568
+ positionChanged() {
13569
+ if (this.$fastController.isConnected) {
13570
+ this.updateLayout();
13571
+ }
13572
+ }
13573
+ anchorElementChanged(oldValue) {
13574
+ if (this.$fastController.isConnected) {
13575
+ if (oldValue !== null && oldValue !== undefined) {
13576
+ oldValue.removeEventListener("mouseover", this.handleAnchorMouseOver);
13577
+ oldValue.removeEventListener("mouseout", this.handleAnchorMouseOut);
13578
+ oldValue.removeEventListener("focusin", this.handleAnchorFocusIn);
13579
+ oldValue.removeEventListener("focusout", this.handleAnchorFocusOut);
13580
+ }
13581
+ if (this.anchorElement !== null && this.anchorElement !== undefined) {
13582
+ this.anchorElement.addEventListener("mouseover", this.handleAnchorMouseOver, { passive: true });
13583
+ this.anchorElement.addEventListener("mouseout", this.handleAnchorMouseOut, { passive: true });
13584
+ this.anchorElement.addEventListener("focusin", this.handleAnchorFocusIn, {
13585
+ passive: true,
13586
+ });
13587
+ this.anchorElement.addEventListener("focusout", this.handleAnchorFocusOut, { passive: true });
13588
+ const anchorId = this.anchorElement.id;
13589
+ if (this.anchorElement.parentElement !== null) {
13590
+ this.anchorElement.parentElement
13591
+ .querySelectorAll(":hover")
13592
+ .forEach(element => {
13593
+ if (element.id === anchorId) {
13594
+ this.startShowDelayTimer();
13595
+ }
13596
+ });
13597
+ }
13598
+ }
13599
+ if (this.region !== null &&
13600
+ this.region !== undefined &&
13601
+ this.tooltipVisible) {
13602
+ this.region.anchorElement = this.anchorElement;
13603
+ }
13604
+ this.updateLayout();
13605
+ }
13606
+ }
13607
+ viewportElementChanged() {
13608
+ if (this.region !== null && this.region !== undefined) {
13609
+ this.region.viewportElement = this.viewportElement;
13610
+ }
13611
+ this.updateLayout();
13612
+ }
13613
+ connectedCallback() {
13614
+ super.connectedCallback();
13615
+ this.anchorElement = this.getAnchor();
13616
+ this.updateTooltipVisibility();
13617
+ }
13618
+ disconnectedCallback() {
13619
+ this.hideTooltip();
13620
+ this.clearShowDelayTimer();
13621
+ this.clearHideDelayTimer();
13622
+ super.disconnectedCallback();
13623
+ }
13624
+ /**
13625
+ * updated the properties being passed to the anchored region
13626
+ */
13627
+ updateLayout() {
13628
+ this.verticalPositioningMode = "locktodefault";
13629
+ this.horizontalPositioningMode = "locktodefault";
13630
+ switch (this.position) {
13631
+ case TooltipPosition.top:
13632
+ case TooltipPosition.bottom:
13633
+ this.verticalDefaultPosition = this.position;
13634
+ this.horizontalDefaultPosition = "center";
13635
+ break;
13636
+ case TooltipPosition.right:
13637
+ case TooltipPosition.left:
13638
+ case TooltipPosition.start:
13639
+ case TooltipPosition.end:
13640
+ this.verticalDefaultPosition = "center";
13641
+ this.horizontalDefaultPosition = this.position;
13642
+ break;
13643
+ case TooltipPosition.topLeft:
13644
+ this.verticalDefaultPosition = "top";
13645
+ this.horizontalDefaultPosition = "left";
13646
+ break;
13647
+ case TooltipPosition.topRight:
13648
+ this.verticalDefaultPosition = "top";
13649
+ this.horizontalDefaultPosition = "right";
13650
+ break;
13651
+ case TooltipPosition.bottomLeft:
13652
+ this.verticalDefaultPosition = "bottom";
13653
+ this.horizontalDefaultPosition = "left";
13654
+ break;
13655
+ case TooltipPosition.bottomRight:
13656
+ this.verticalDefaultPosition = "bottom";
13657
+ this.horizontalDefaultPosition = "right";
13658
+ break;
13659
+ case TooltipPosition.topStart:
13660
+ this.verticalDefaultPosition = "top";
13661
+ this.horizontalDefaultPosition = "start";
13662
+ break;
13663
+ case TooltipPosition.topEnd:
13664
+ this.verticalDefaultPosition = "top";
13665
+ this.horizontalDefaultPosition = "end";
13666
+ break;
13667
+ case TooltipPosition.bottomStart:
13668
+ this.verticalDefaultPosition = "bottom";
13669
+ this.horizontalDefaultPosition = "start";
13670
+ break;
13671
+ case TooltipPosition.bottomEnd:
13672
+ this.verticalDefaultPosition = "bottom";
13673
+ this.horizontalDefaultPosition = "end";
13674
+ break;
13675
+ default:
13676
+ this.verticalPositioningMode = "dynamic";
13677
+ this.horizontalPositioningMode = "dynamic";
13678
+ this.verticalDefaultPosition = void 0;
13679
+ this.horizontalDefaultPosition = "center";
13680
+ break;
13681
+ }
13682
+ }
13683
+ }
13684
+ __decorate$1([
13685
+ attr({ mode: "boolean" })
13686
+ ], Tooltip$1.prototype, "visible", void 0);
13687
+ __decorate$1([
13688
+ attr
13689
+ ], Tooltip$1.prototype, "anchor", void 0);
13690
+ __decorate$1([
13691
+ attr
13692
+ ], Tooltip$1.prototype, "delay", void 0);
13693
+ __decorate$1([
13694
+ attr
13695
+ ], Tooltip$1.prototype, "position", void 0);
13696
+ __decorate$1([
13697
+ attr({ attribute: "auto-update-mode" })
13698
+ ], Tooltip$1.prototype, "autoUpdateMode", void 0);
13699
+ __decorate$1([
13700
+ attr({ attribute: "horizontal-viewport-lock" })
13701
+ ], Tooltip$1.prototype, "horizontalViewportLock", void 0);
13702
+ __decorate$1([
13703
+ attr({ attribute: "vertical-viewport-lock" })
13704
+ ], Tooltip$1.prototype, "verticalViewportLock", void 0);
13705
+ __decorate$1([
13706
+ observable
13707
+ ], Tooltip$1.prototype, "anchorElement", void 0);
13708
+ __decorate$1([
13709
+ observable
13710
+ ], Tooltip$1.prototype, "viewportElement", void 0);
13711
+ __decorate$1([
13712
+ observable
13713
+ ], Tooltip$1.prototype, "verticalPositioningMode", void 0);
13714
+ __decorate$1([
13715
+ observable
13716
+ ], Tooltip$1.prototype, "horizontalPositioningMode", void 0);
13717
+ __decorate$1([
13718
+ observable
13719
+ ], Tooltip$1.prototype, "horizontalInset", void 0);
13720
+ __decorate$1([
13721
+ observable
13722
+ ], Tooltip$1.prototype, "verticalInset", void 0);
13723
+ __decorate$1([
13724
+ observable
13725
+ ], Tooltip$1.prototype, "horizontalScaling", void 0);
13726
+ __decorate$1([
13727
+ observable
13728
+ ], Tooltip$1.prototype, "verticalScaling", void 0);
13729
+ __decorate$1([
13730
+ observable
13731
+ ], Tooltip$1.prototype, "verticalDefaultPosition", void 0);
13732
+ __decorate$1([
13733
+ observable
13734
+ ], Tooltip$1.prototype, "horizontalDefaultPosition", void 0);
13735
+ __decorate$1([
13736
+ observable
13737
+ ], Tooltip$1.prototype, "tooltipVisible", void 0);
13738
+ __decorate$1([
13739
+ observable
13740
+ ], Tooltip$1.prototype, "currentDirection", void 0);
13741
+
13141
13742
  /**
13142
13743
  * The template for the {@link @microsoft/fast-foundation#(TreeItem:class)} component.
13143
13744
  * @public
@@ -13692,7 +14293,7 @@
13692
14293
  */
13693
14294
  const focusVisible$1 = canUseFocusVisible() ? "focus-visible" : "focus";
13694
14295
 
13695
- const styles$s = css `
14296
+ const styles$t = css `
13696
14297
  :host {
13697
14298
  contain: layout;
13698
14299
  display: block;
@@ -13716,7 +14317,7 @@
13716
14317
  baseName: 'anchored-region',
13717
14318
  baseClass: AnchoredRegion$1,
13718
14319
  template: anchoredRegionTemplate,
13719
- styles: styles$s
14320
+ styles: styles$t
13720
14321
  });
13721
14322
  DesignSystem.getOrCreate()
13722
14323
  .withPrefix('nimble')
@@ -14017,6 +14618,7 @@
14017
14618
  tooltipCaptionFontWeight: 'tooltip-caption-font-weight',
14018
14619
  tooltipCaptionFontLineHeight: 'tooltip-caption-font-line-height',
14019
14620
  tooltipCaptionFallbackFontFamily: 'tooltip-caption-fallback-font-family',
14621
+ tooltipBackgroundColor: 'tooltip-background-color',
14020
14622
  errorTextFont: 'error-text-font',
14021
14623
  errorTextFontColor: 'error-text-font-color',
14022
14624
  errorTextDisabledFontColor: 'error-text-disabled-font-color',
@@ -14053,7 +14655,7 @@
14053
14655
 
14054
14656
  const template$5 = html `<slot></slot>`;
14055
14657
 
14056
- const styles$r = css `
14658
+ const styles$s = css `
14057
14659
  :host {
14058
14660
  display: contents;
14059
14661
  }
@@ -14109,7 +14711,7 @@
14109
14711
  ], ThemeProvider.prototype, "theme", void 0);
14110
14712
  const nimbleDesignSystemProvider = ThemeProvider.compose({
14111
14713
  baseName: 'theme-provider',
14112
- styles: styles$r,
14714
+ styles: styles$s,
14113
14715
  template: template$5
14114
14716
  });
14115
14717
  DesignSystem.getOrCreate()
@@ -14148,6 +14750,7 @@
14148
14750
  const iconColor = DesignToken.create(styleNameFromTokenName(tokenNames.iconColor)).withDefault((element) => getColorForTheme(element, Black91, Black15, White));
14149
14751
  const popupBoxShadowColor = DesignToken.create(styleNameFromTokenName(tokenNames.popupBoxShadowColor)).withDefault((element) => hexToRgbaCssColor(getColorForTheme(element, Black75, Black85, Black85), 0.3));
14150
14752
  const popupBorderColor = DesignToken.create(styleNameFromTokenName(tokenNames.popupBorderColor)).withDefault((element) => hexToRgbaCssColor(getColorForTheme(element, Black91, Black15, White), 0.3));
14753
+ const tooltipBackgroundColor = DesignToken.create(styleNameFromTokenName(tokenNames.tooltipBackgroundColor)).withDefault((element) => getColorForTheme(element, Black15, Black85, ForestGreen));
14151
14754
  // Component Sizing Tokens
14152
14755
  const controlHeight = DesignToken.create(styleNameFromTokenName(tokenNames.controlHeight)).withDefault('32px');
14153
14756
  const smallPadding = DesignToken.create(styleNameFromTokenName(tokenNames.smallPadding)).withDefault('4px');
@@ -14171,7 +14774,7 @@
14171
14774
  const [groupHeaderFont, groupHeaderFontColor, groupHeaderDisabledFontColor, groupHeaderFontFamily, groupHeaderFontWeight, groupHeaderFontSize, groupHeaderFontLineHeight, groupHeaderFallbackFontFamily] = createFontTokens(tokenNames.groupHeaderFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), GroupLabel1Family, GroupLabel1Weight, GroupLabel1Size, GroupLabel1LineHeight, 'sans-serif');
14172
14775
  const [controlLabelFont, controlLabelFontColor, controlLabelDisabledFontColor, controlLabelFontFamily, controlLabelFontWeight, controlLabelFontSize, controlLabelFontLineHeight, controlLabelFallbackFontFamily] = createFontTokens(tokenNames.controlLabelFont, (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.6), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), ControlLabel1Family, ControlLabel1Weight, ControlLabel1Size, ControlLabel1LineHeight, 'sans-serif');
14173
14776
  const [buttonLabelFont, buttonLabelFontColor, buttonLabelDisabledFontColor, buttonLabelFontFamily, buttonLabelFontWeight, buttonLabelFontSize, buttonLabelFontLineHeight, buttonLabelFallbackFontFamily] = createFontTokens(tokenNames.buttonLabelFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), ButtonLabel1Family, ButtonLabel1Weight, ButtonLabel1Size, ButtonLabel1LineHeight, 'sans-serif');
14174
- createFontTokens(tokenNames.tooltipCaptionFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), TooltipCaptionFamily, TooltipCaptionWeight, TooltipCaptionSize, TooltipCaptionLineHeight, 'sans-serif');
14777
+ const [tooltipCaptionFont, tooltipCaptionFontColor, tooltipCaptionDisabledFontColor, tooltipCaptionFontFamily, tooltipCaptionFontWeight, tooltipCaptionFontSize, tooltipCaptionFontLineHeight, tooltipCaptionFallbackFontFamily] = createFontTokens(tokenNames.tooltipCaptionFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), TooltipCaptionFamily, TooltipCaptionWeight, TooltipCaptionSize, TooltipCaptionLineHeight, 'sans-serif');
14175
14778
  const [errorTextFont, errorTextFontColor, errorTextDisabledFontColor, errorTextFontFamily, errorTextFontWeight, errorTextFontSize, errorTextFontLineHeight, errorTextFallbackFontFamily] = createFontTokens(tokenNames.errorTextFont, (element) => getFailColorForTheme(element), (element) => hexToRgbaCssColor(getFailColorForTheme(element), 0.3), ErrorLightUiFamily, ErrorLightUiWeight, ErrorLightUiSize, TooltipCaptionLineHeight, 'sans-serif');
14176
14779
  // Font Transform Tokens
14177
14780
  const groupHeaderTextTransform = DesignToken.create(styleNameFromTokenName(tokenNames.groupHeaderTextTransform)).withDefault('uppercase');
@@ -14358,7 +14961,7 @@
14358
14961
  */
14359
14962
  const themeBehavior = (lightStyle, darkStyleOrAlias, colorStyleOrAlias) => new ThemeStyleSheetBehavior(lightStyle, darkStyleOrAlias, colorStyleOrAlias);
14360
14963
 
14361
- const styles$q = css `
14964
+ const styles$r = css `
14362
14965
  ${display('inline-block')}
14363
14966
 
14364
14967
  :host {
@@ -14421,7 +15024,7 @@
14421
15024
  baseName: 'breadcrumb',
14422
15025
  baseClass: Breadcrumb$1,
14423
15026
  template: breadcrumbTemplate,
14424
- styles: styles$q
15027
+ styles: styles$r
14425
15028
  });
14426
15029
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleBreadcrumb());
14427
15030
 
@@ -15007,7 +15610,7 @@
15007
15610
  */
15008
15611
  const focusVisible = `:${focusVisible$1}`;
15009
15612
 
15010
- const styles$p = css `
15613
+ const styles$q = css `
15011
15614
  ${display('inline-flex')}
15012
15615
 
15013
15616
  :host {
@@ -15087,7 +15690,7 @@
15087
15690
  baseName: 'breadcrumb-item',
15088
15691
  baseClass: BreadcrumbItem$1,
15089
15692
  template: breadcrumbItemTemplate,
15090
- styles: styles$p,
15693
+ styles: styles$q,
15091
15694
  separator: forwardSlash16X16.data
15092
15695
  });
15093
15696
  DesignSystem.getOrCreate()
@@ -15117,7 +15720,7 @@
15117
15720
  block: 'block'
15118
15721
  };
15119
15722
 
15120
- const styles$o = css `
15723
+ const styles$p = css `
15121
15724
  ${display('inline-flex')}
15122
15725
 
15123
15726
  :host {
@@ -15324,7 +15927,7 @@
15324
15927
  `));
15325
15928
 
15326
15929
  // prettier-ignore
15327
- const styles$n = styles$o
15930
+ const styles$o = styles$p
15328
15931
  .withBehaviors(appearanceBehavior(ButtonAppearance.outline, css `
15329
15932
  :host(.primary) .control {
15330
15933
  box-shadow: 0px 0px 0px ${borderWidth} rgba(${actionRgbPartialColor}, 0.3) inset;
@@ -15438,14 +16041,14 @@
15438
16041
  baseName: 'button',
15439
16042
  baseClass: Button$1,
15440
16043
  template: buttonTemplate,
15441
- styles: styles$n,
16044
+ styles: styles$o,
15442
16045
  shadowOptions: {
15443
16046
  delegatesFocus: true
15444
16047
  }
15445
16048
  });
15446
16049
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleButton());
15447
16050
 
15448
- const styles$m = css `
16051
+ const styles$n = css `
15449
16052
  ${display('inline-flex')}
15450
16053
 
15451
16054
  :host {
@@ -15563,7 +16166,7 @@
15563
16166
  baseName: 'checkbox',
15564
16167
  baseClass: Checkbox$1,
15565
16168
  template: checkboxTemplate,
15566
- styles: styles$m,
16169
+ styles: styles$n,
15567
16170
  checkedIndicator: check16X16.data,
15568
16171
  indeterminateIndicator: minus16X16.data
15569
16172
  });
@@ -15581,7 +16184,7 @@
15581
16184
  </template
15582
16185
  `;
15583
16186
 
15584
- const styles$l = css `
16187
+ const styles$m = css `
15585
16188
  ${display('inline-flex')}
15586
16189
 
15587
16190
  :host {
@@ -15628,7 +16231,7 @@
15628
16231
  const composedIcon = iconClass.compose({
15629
16232
  baseName,
15630
16233
  template: template$4,
15631
- styles: styles$l,
16234
+ styles: styles$m,
15632
16235
  baseClass: iconClass
15633
16236
  });
15634
16237
  DesignSystem.getOrCreate().withPrefix('nimble').register(composedIcon());
@@ -15656,7 +16259,7 @@
15656
16259
  }
15657
16260
  registerIcon('icon-arrow-expander-down', IconArrowExpanderDown);
15658
16261
 
15659
- const styles$k = css `
16262
+ const styles$l = css `
15660
16263
  ${display('inline-flex')}
15661
16264
 
15662
16265
  :host {
@@ -15845,7 +16448,7 @@
15845
16448
  }
15846
16449
  `;
15847
16450
 
15848
- const styles$j = css `
16451
+ const styles$k = css `
15849
16452
  .error-icon {
15850
16453
  display: none;
15851
16454
  }
@@ -15883,9 +16486,9 @@
15883
16486
  }
15884
16487
  `;
15885
16488
 
15886
- const styles$i = css `
16489
+ const styles$j = css `
16490
+ ${styles$l}
15887
16491
  ${styles$k}
15888
- ${styles$j}
15889
16492
 
15890
16493
  :host {
15891
16494
  --ni-private-hover-bottom-border-width: 2px;
@@ -16057,7 +16660,7 @@
16057
16660
  baseName: 'combobox',
16058
16661
  baseClass: Combobox$1,
16059
16662
  template: comboboxTemplate,
16060
- styles: styles$i,
16663
+ styles: styles$j,
16061
16664
  shadowOptions: {
16062
16665
  delegatesFocus: true
16063
16666
  },
@@ -17182,7 +17785,7 @@
17182
17785
  slideOutOptions
17183
17786
  };
17184
17787
 
17185
- const styles$h = css `
17788
+ const styles$i = css `
17186
17789
  ${display('block')}
17187
17790
 
17188
17791
  :host {
@@ -17494,7 +18097,7 @@
17494
18097
  const nimbleDrawer = Drawer.compose({
17495
18098
  baseName: 'drawer',
17496
18099
  template: dialogTemplate,
17497
- styles: styles$h
18100
+ styles: styles$i
17498
18101
  });
17499
18102
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleDrawer());
17500
18103
 
@@ -19038,7 +19641,7 @@
19038
19641
  }
19039
19642
  registerIcon('icon-xmark-check', IconXmarkCheck);
19040
19643
 
19041
- const styles$g = css `
19644
+ const styles$h = css `
19042
19645
  ${display('flex')}
19043
19646
 
19044
19647
  :host {
@@ -19117,11 +19720,11 @@
19117
19720
  baseName: 'list-option',
19118
19721
  baseClass: ListboxOption,
19119
19722
  template: listboxOptionTemplate,
19120
- styles: styles$g
19723
+ styles: styles$h
19121
19724
  });
19122
19725
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleListOption());
19123
19726
 
19124
- const styles$f = css `
19727
+ const styles$g = css `
19125
19728
  ${display('grid')}
19126
19729
 
19127
19730
  :host {
@@ -19176,11 +19779,11 @@
19176
19779
  baseName: 'menu',
19177
19780
  baseClass: Menu$1,
19178
19781
  template: menuTemplate,
19179
- styles: styles$f
19782
+ styles: styles$g
19180
19783
  });
19181
19784
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleMenu());
19182
19785
 
19183
- const styles$e = css `
19786
+ const styles$f = css `
19184
19787
  ${display('inline-block')}
19185
19788
 
19186
19789
  :host {
@@ -19198,8 +19801,8 @@
19198
19801
  }
19199
19802
  `;
19200
19803
 
19201
- const styles$d = css `
19202
- ${styles$o}
19804
+ const styles$e = css `
19805
+ ${styles$p}
19203
19806
 
19204
19807
  .control[aria-pressed='true'] {
19205
19808
  background-color: ${fillSelectedColor};
@@ -19301,7 +19904,7 @@
19301
19904
  const nimbleToggleButton = ToggleButton.compose({
19302
19905
  baseName: 'toggle-button',
19303
19906
  template: template$3,
19304
- styles: styles$d,
19907
+ styles: styles$e,
19305
19908
  shadowOptions: {
19306
19909
  delegatesFocus: true
19307
19910
  }
@@ -19518,14 +20121,14 @@
19518
20121
  const nimbleMenuButton = MenuButton.compose({
19519
20122
  baseName: 'menu-button',
19520
20123
  template: template$2,
19521
- styles: styles$e,
20124
+ styles: styles$f,
19522
20125
  shadowOptions: {
19523
20126
  delegatesFocus: true
19524
20127
  }
19525
20128
  });
19526
20129
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleMenuButton());
19527
20130
 
19528
- const styles$c = css `
20131
+ const styles$d = css `
19529
20132
  ${display('grid')}
19530
20133
 
19531
20134
  :host {
@@ -19623,7 +20226,7 @@
19623
20226
  baseName: 'menu-item',
19624
20227
  baseClass: MenuItem$1,
19625
20228
  template: menuItemTemplate,
19626
- styles: styles$c,
20229
+ styles: styles$d,
19627
20230
  expandCollapseGlyph: arrowExpanderRight16X16.data
19628
20231
  });
19629
20232
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleMenuItem());
@@ -19637,7 +20240,7 @@
19637
20240
  block: 'block'
19638
20241
  };
19639
20242
 
19640
- const styles$b = css `
20243
+ const styles$c = css `
19641
20244
  ${display('inline-block')}
19642
20245
 
19643
20246
  :host {
@@ -19834,7 +20437,7 @@
19834
20437
  baseName: 'number-field',
19835
20438
  baseClass: NumberField$1,
19836
20439
  template: numberFieldTemplate,
19837
- styles: styles$b,
20440
+ styles: styles$c,
19838
20441
  shadowOptions: {
19839
20442
  delegatesFocus: true
19840
20443
  },
@@ -19863,8 +20466,8 @@
19863
20466
  });
19864
20467
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleNumberField());
19865
20468
 
19866
- const styles$a = css `
19867
- ${styles$k}
20469
+ const styles$b = css `
20470
+ ${styles$l}
19868
20471
  `;
19869
20472
 
19870
20473
  /**
@@ -19902,12 +20505,12 @@
19902
20505
  baseName: 'select',
19903
20506
  baseClass: Select$1,
19904
20507
  template: selectTemplate,
19905
- styles: styles$a,
20508
+ styles: styles$b,
19906
20509
  indicator: arrowExpanderDown16X16.data
19907
20510
  });
19908
20511
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleSelect());
19909
20512
 
19910
- const styles$9 = css `
20513
+ const styles$a = css `
19911
20514
  ${display('inline-flex')}
19912
20515
 
19913
20516
  :host {
@@ -20120,11 +20723,11 @@
20120
20723
  baseClass: Switch$1,
20121
20724
  baseName: 'switch',
20122
20725
  template: template$1,
20123
- styles: styles$9
20726
+ styles: styles$a
20124
20727
  });
20125
20728
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleSwitch());
20126
20729
 
20127
- const styles$8 = css `
20730
+ const styles$9 = css `
20128
20731
  ${display('inline-flex')}
20129
20732
 
20130
20733
  :host {
@@ -20228,11 +20831,11 @@
20228
20831
  baseName: 'tab',
20229
20832
  baseClass: Tab$1,
20230
20833
  template: tabTemplate,
20231
- styles: styles$8
20834
+ styles: styles$9
20232
20835
  });
20233
20836
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTab());
20234
20837
 
20235
- const styles$7 = css `
20838
+ const styles$8 = css `
20236
20839
  ${display('block')}
20237
20840
 
20238
20841
  :host {
@@ -20252,11 +20855,11 @@
20252
20855
  baseName: 'tab-panel',
20253
20856
  baseClass: TabPanel$1,
20254
20857
  template: tabPanelTemplate,
20255
- styles: styles$7
20858
+ styles: styles$8
20256
20859
  });
20257
20860
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTabPanel());
20258
20861
 
20259
- const styles$6 = css `
20862
+ const styles$7 = css `
20260
20863
  ${display('grid')}
20261
20864
 
20262
20865
  :host {
@@ -20294,11 +20897,11 @@
20294
20897
  baseName: 'tabs',
20295
20898
  baseClass: Tabs$1,
20296
20899
  template: tabsTemplate,
20297
- styles: styles$6
20900
+ styles: styles$7
20298
20901
  });
20299
20902
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTabs());
20300
20903
 
20301
- const styles$5 = css `
20904
+ const styles$6 = css `
20302
20905
  ${display('flex')}
20303
20906
 
20304
20907
  :host {
@@ -20333,7 +20936,7 @@
20333
20936
  const nimbleTabsToolbar = TabsToolbar.compose({
20334
20937
  baseName: 'tabs-toolbar',
20335
20938
  template,
20336
- styles: styles$5
20939
+ styles: styles$6
20337
20940
  });
20338
20941
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTabsToolbar());
20339
20942
 
@@ -20342,7 +20945,7 @@
20342
20945
  block: 'block'
20343
20946
  };
20344
20947
 
20345
- const styles$4 = css `
20948
+ const styles$5 = css `
20346
20949
  ${display('inline-flex')}
20347
20950
 
20348
20951
  :host {
@@ -20484,7 +21087,7 @@
20484
21087
  baseName: 'text-area',
20485
21088
  baseClass: TextArea$1,
20486
21089
  template: textAreaTemplate,
20487
- styles: styles$4,
21090
+ styles: styles$5,
20488
21091
  shadowOptions: {
20489
21092
  delegatesFocus: true
20490
21093
  }
@@ -20501,9 +21104,9 @@
20501
21104
  frameless: 'frameless'
20502
21105
  };
20503
21106
 
20504
- const styles$3 = css `
21107
+ const styles$4 = css `
20505
21108
  ${display('inline-block')}
20506
- ${styles$j}
21109
+ ${styles$k}
20507
21110
 
20508
21111
  :host {
20509
21112
  font: ${bodyFont};
@@ -20785,7 +21388,7 @@
20785
21388
  baseName: 'text-field',
20786
21389
  baseClass: TextField$1,
20787
21390
  template: textFieldTemplate,
20788
- styles: styles$3,
21391
+ styles: styles$4,
20789
21392
  shadowOptions: {
20790
21393
  delegatesFocus: true
20791
21394
  },
@@ -20801,7 +21404,7 @@
20801
21404
  });
20802
21405
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTextField());
20803
21406
 
20804
- const styles$2 = css `
21407
+ const styles$3 = css `
20805
21408
  .positioning-region {
20806
21409
  display: flex;
20807
21410
  padding: ${smallPadding} ${standardPadding};
@@ -20836,13 +21439,50 @@
20836
21439
  baseName: 'toolbar',
20837
21440
  baseClass: Toolbar$1,
20838
21441
  template: toolbarTemplate,
20839
- styles: styles$2,
21442
+ styles: styles$3,
20840
21443
  shadowOptions: {
20841
21444
  delegatesFocus: true
20842
21445
  }
20843
21446
  });
20844
21447
  DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleToolbar());
20845
21448
 
21449
+ const styles$2 = css `
21450
+ ${display('inline-flex')}
21451
+
21452
+ :host {
21453
+ font: ${tooltipCaptionFont};
21454
+ color: ${tooltipCaptionFontColor};
21455
+ text-align: left;
21456
+ }
21457
+
21458
+ .tooltip {
21459
+ box-sizing: border-box;
21460
+ flex-shrink: 0;
21461
+ max-width: 440px;
21462
+ border: ${borderWidth} solid rgba(${borderRgbPartialColor}, 0.3);
21463
+ box-shadow: 0px 3px 4px ${popupBoxShadowColor};
21464
+ background-color: ${tooltipBackgroundColor};
21465
+ padding-bottom: 6px;
21466
+ padding-left: calc(${standardPadding} / 2);
21467
+ padding-right: calc(${standardPadding} / 2);
21468
+ padding-top: ${smallPadding};
21469
+ display: inline-flex;
21470
+ }
21471
+ `;
21472
+
21473
+ /**
21474
+ * A nimble-styled tooltip control.
21475
+ */
21476
+ class Tooltip extends Tooltip$1 {
21477
+ }
21478
+ const nimbleTooltip = Tooltip.compose({
21479
+ baseName: 'tooltip',
21480
+ baseClass: Tooltip$1,
21481
+ template: tooltipTemplate,
21482
+ styles: styles$2
21483
+ });
21484
+ DesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTooltip());
21485
+
20846
21486
  const groupSelectedAttribute = 'group-selected';
20847
21487
  const TreeViewSelectionMode = {
20848
21488
  all: 'all',